home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / WIN_PRO / FREELINK.ZIP;1 / FREELINK.DOC < prev    next >
Encoding:
Text File  |  1992-11-09  |  98.0 KB  |  2,403 lines

  1. INTRODUCTION
  2. -=-=-=-=-=-=
  3.  
  4. Thank you for using Freelink, the free dynamic overlay linker
  5. with WarpLink (tm) version 2.5 technology.  We hope you like it.
  6. This file contains instructions for using the Freelink linker
  7. and its associated utilities.  Because Freelink shares a common
  8. ancestry with WarpLink, they share several of the same utilities
  9. that you will find included in the Freelink package, including
  10. WarpMod, WarpConv, and Interactive WarpLink.  PLEASE NOTE:
  11. Freelink is a fully-featured linker in its own right and not a
  12. crippled demonstration copy with the sole intention of pitching
  13. sales for WarpLink.
  14.  
  15. But first, let's get the inevitable legal stuff out of the way.
  16.  
  17. Freelink carries a copyright (Copyright 1989-92) by Michael
  18. Devore and hyperkinetix.  Use of code or proprietary algorithms
  19. within Freelink, or disassembly of Freelink code for purposes of
  20. using its code or determining the nature of its algorithms for
  21. use in competition with Freelink, is an infringement on
  22. Freelink's copyright.  Any suspected copyright infringements
  23. will be vigorously pursued.  All proven copyright infringements
  24. will be prosecuted to the fullest extent of the law.  Further
  25. copyright restrictions on Freelink are contained in the
  26. immediately following paragraph.
  27.  
  28. Freelink may be distributed without charge, provided all of the
  29. original Freelink files are intact.  Distribution of partial or
  30. modified Freelink files is strictly forbidden.  Charging a fee
  31. for the use of Freelink or distribution of Freelink with other
  32. commercial products without the express permission of copyright
  33. holders is prohibited.  No charges may be levied to distribute
  34. Freelink with two exceptions:  1. User groups may charge a
  35. nominal disk copying and handling charge for redistribution; 2.
  36. Online services and bulletin board systems (BBS) may charge
  37. their standard connect rates or subscription fees to transfer
  38. the Freelink package to their users.  Files created by Freelink
  39. have no additional copyright restrictions, and may be freely
  40. used for both commercial and noncommercial purposes.
  41.  
  42. Copyright holders make no claim as to Freelink's fitness for a
  43. specific purpose.  Under no conditions will copyright holders be
  44. held liable for damages of any kind arising out of the use of or
  45. inability to use Freelink.  If you do not accept these copyright
  46. restrictions your sole remedy is not to use and not to
  47. distribute Freelink.
  48.  
  49. All right, that's the end of the boring legal statements.
  50.  
  51. Why release a fully-featured copy of a dynamic linker to the
  52. public for free?  Two main reasons:
  53.  
  54. 1.  Times are tough for everyone.  This is an attempt to help
  55. out those "starving developers" that cannot afford expensive
  56. tools and those employees who must suffer with Scrooge-like
  57. corporate purchasing policies.
  58.  
  59. 2.  Some of you will probably want to purchase our commercial
  60. WarpLink product after trying Freelink.  Let's not toss around
  61. bafflegab.  Obviously, we hope a number of you will like
  62. Freelink so much you'll upgrade to WarpLink.  That's a big
  63. reason we are releasing Freelink to the public.  But we also
  64. know that for another large group of users, Freelink will meet
  65. all their needs and they need not spend a dime on a commercial
  66. linker.  That's fine with us too.  Given these economic times,
  67. we expect and encourage frugal allocation of financial
  68. resources.
  69.  
  70. Bulletin board system (BBS) operators, please read the ORDER.FRM
  71. file.  It presents monetary incentives intended to reward your
  72. generosity in making Freelink available to your users.
  73.  
  74.  
  75.  
  76. SHIPPING LIST
  77. -=-=-=-=-=-=-
  78.  
  79. Before using Freelink, but sure you received the correct files.
  80. Freelink contains the following files:
  81.  
  82. FREELINK.DOC    100330 11-08-92  10:14p
  83. FREELINK.EXE     83663 11-08-92  11:30p
  84. IW       EXE    184630 09-09-92  11:08a
  85. WARPCONV EXE     29478 07-09-91  11:38a
  86. WARPMOD  EXE     33640 09-30-92   4:24p
  87. ORDER    FRM      8307 11-07-92  10:27a
  88. READ     ME        205 11-04-92   1:46p
  89. C5OVLMGR OBJ     11739 09-02-92   2:57p
  90. OVLMGR   OBJ     10897 09-02-92   2:46p
  91. C501OVL  PRJ      2264 07-06-92   2:20p
  92. DBU      PRJ      1689 11-06-92   1:53p
  93. S87OVL   PRJ      2092 07-06-92   2:19p
  94.  
  95. If you did not receive all the files list above with the size,
  96. date, and timestamp as shown, STOP!  DO NOT USE THESE FILES!
  97. You do not have a valid copy of the Freelink package.  The
  98. consequences of using files with unauthorized modifications or
  99. incomplete files in violation of Freelink's copyright can range
  100. from unstable program operation to software virus infections.
  101. Request that the person or BBS distributing Freelink give you
  102. the full, unmodified, Freelink package.
  103.  
  104.  
  105.  
  106. INTRODUCTION TO FREELINK
  107. -=-=-=-=-=-=-=-=-=-=-=-=
  108.  
  109. What is Freelink?
  110.  
  111. Freelink is a DOS-compatible linker for use with any language
  112. that produces standard Microsoft Link-compatible .OBJ files.
  113.  
  114. Freelink is much more than that, however.  It also supports:
  115.  
  116. 1. Dynamic overlays.  Your programs will use less memory by
  117.    leaving more of the program on disk and bringing only the
  118.    parts it needs into RAM.
  119.  
  120. 2. Improved functionality of your application.  Freelink allows
  121.    overlaid functions to call other overlaid functions, nesting
  122.    down to any level.  No more code modifications required
  123.    because of linker limitations.
  124.  
  125. 3. Fast linking.  Freelink is much faster than most linkers, so
  126.    you'll save time on linking jobs, especially on large
  127.    projects.  Freelink can handle many tasks that other linkers
  128.    just can't handle at all.
  129.  
  130. 4. Very specific error handling.  Freelink not only tells you
  131.    what's wrong, but also what the error means and what you
  132.    should do to fix the problem.
  133.  
  134. 5. No EXE2BIN.  Freelink can create .COM files directly from
  135.    .OBJ files, instead of making you go through the extra step
  136.    of running EXE2BIN.
  137.  
  138. 6. Real linking.  Some other programs that do dynamic overlays,
  139.    or any overlays at all, aren't actually linkers.  They are
  140.    merely overlay managers that require the use of Microsoft
  141.    LINK or a compatible linker.
  142.  
  143. 7. Clipper-specific functions.  Incremental linking dramatically
  144.    reduces your link time by re-linking only those modules which
  145.    have changed.  Freelink also has automatic compaction of your
  146.    Clipper program symbol tables.
  147.  
  148. 8. The ability to use extended memory or expanded memory during
  149.    link time to greatly improve linker performance.
  150.  
  151. 9. The ability to take advantage of extended memory or expanded
  152.    memory while your application is running for lower memory
  153.    requirements and faster program execution.
  154.  
  155. 10. Extraction of individual modules from a library file at
  156.     linktime to let you put some portions of a library into the
  157.     root and other portions into the overlay.  No need to use
  158.     library manager utilities.
  159.  
  160. 11. Extra utilities.  WarpMod allows you to modify certain link
  161.     parameters without relinking.  WarpConv converts existing
  162.     PLink-style response files into a Freelink-readable format.
  163.     Interactive WarpLink automates the linking process and builds
  164.     your link files for you.
  165.  
  166. 12. Other extras.  DOSSEG ordering to make your assembly
  167.     language programs smaller and more compatible with other
  168.     languages, a predefined $$_COM_END variable for use in a
  169.     .COM file that needs to determine its own size, a similar
  170.     variable for EXE files, support for four linker environment
  171.     variables to increase linking flexibility, and expanded .MAP
  172.     files for tracking down particularly nasty bugs.
  173.  
  174. NOTE:  Freelink supports many languages, but does not support
  175. use of overlays with Microsoft Basic PDS 7.x (QuickBasic is
  176. fine).  Freelink may not properly link Microsoft C 7.0 programs
  177. (earlier versions work correctly with and without overlays) and
  178. Borland C programs in C++ mode (standard C programs without
  179. virtual functions should work correctly).  Use of overlays with
  180. Clarion and Quicksilver is not supported with Freelink (but is
  181. supported with WarpLink).  Other languages should link with
  182. Freelink provided they do not use obsolete or nonstandard object
  183. module records.
  184.  
  185.  
  186. USING FREELINK
  187. -=-=-=-=-=-=-=
  188.  
  189. Large projects and memory use
  190.  
  191. Freelink uses all available RAM memory when linking.  For most
  192. jobs, that's fine.  Sometimes there's not enough memory for the
  193. link.  In those cases Freelink creates a temporary file.  The
  194. directory for this file can be specified using the TMP
  195. environment variable.  If you don't use the TMP variable the
  196. file will be placed in the current directory.  The default name
  197. of the temporary file is VM.TMP in DOS versions prior to 3.0.
  198. In DOS 3.0 and later, it is a unique name.  This file will be
  199. deleted upon linking completion.
  200.  
  201.  
  202. Environment variables
  203.  
  204. Freelink can make use of four environment variables: the LIB
  205. environment variable, OBJ environment variable, TMP environment
  206. variable, and the FREELINK environment variable.
  207.  
  208.  
  209. The LIB environment variable
  210.  
  211. LIB is the name of a directory to search if a .LIB file isn't
  212. found in the current directory.
  213.  
  214. For example, suppose you're in the C:\BUILDER directory.  You
  215. link like this:
  216.  
  217.   freelink  /c  fs,,,bldtt
  218.  
  219. This links FS.OBJ with the runtime library BLDTT.LIB.  /c means
  220. create .COM file.
  221.  
  222. If BLDTT.LIB isn't in the \BUILDER directory, Freelink issues a
  223. "file not found" error.  But if you keep your library files
  224. in the C:\LIB directory, you can inform Freelink by setting the
  225. LIB variable:
  226.  
  227.   SET LIB=C:\LIB
  228.  
  229. That way, when BLDTT.LIB isn't found in the \BUILDER directory,
  230. Freelink searches C:\LIB too.
  231.  
  232. NOTE:  The LIB environment variable can specify more than one
  233. directory, just like the PATH environment variable.
  234.  
  235. You do not always have to specify a .LIB file when one is
  236. required.  This is because some languages, such as Microsoft C,
  237. embed the name of a default library in the .OBJ file while it's
  238. being created.  Freelink will use that default library name when
  239. linking.  A rule of thumb is, if your old linker didn't need the
  240. name of the default library, Freelink won't either.  You can
  241. override this behavior with the /nd command option, which allows
  242. you to disable the search for a default library.
  243.  
  244.  
  245. The OBJ environment variable
  246.  
  247. OBJ is the name of a directory to search if a .OBJ file isn't
  248. found in the current directory.
  249.  
  250. For example, suppose you're in the C:\BUILDER directory.  You
  251. link like this:
  252.  
  253.   freelink  /c  fs,,,bldtt
  254.  
  255. This links FS.OBJ with the runtime library BLDTT.LIB. /c means
  256. create .COM file.
  257.  
  258. If FS.OBJ isn't in the \BUILDER directory, Freelink issues a
  259. "file not found" error.  But if you keep your object modules in
  260. the C:\OBJ directory, you can inform Freelink by setting the OBJ
  261. variable:
  262.  
  263.   SET OBJ=C:\OBJ
  264.  
  265. That way, when FS.OBJ isn't found in the \BUILDER directory,
  266. Freelink searches C:\OBJ too.
  267.  
  268. NOTE:  The OBJ environment variable can specify more than one
  269. directory, just like the PATH environment variable.
  270.  
  271.  
  272. The TMP environment variable
  273.  
  274. Freelink creates a temporary file when memory gets low.  That
  275. file is normally written to the current directory.  You can move
  276. it to another directory (for example, a RAM disk) by naming that
  277. directory in the TMP environment variable.  So, if you normally
  278. link in the C:\CLIPPER directory but want the spill (or
  279. temporary) file, if any, to be placed on your RAM disk on
  280. drive F, use:
  281.  
  282.      SET TMP=F:
  283.  
  284.  
  285. The FREELINK environment variable
  286.  
  287. Freelink also supports a FREELINK environment variable.  This
  288. allows you to preset Freelink command options.  If you are a
  289. Clipper developer only and you always need the /r option and
  290. wanted to change Freelink's default overlay pool value, you
  291. could put this statement in your AUTOEXEC.BAT file:
  292.  
  293.   SET FREELINK=/r /op:m
  294.  
  295. NOTE:  Any option specified at link time either in a response
  296. file or at the DOS command line will override any value set with
  297. the FREELINK environment variable.
  298.  
  299.  
  300. LINKING FROM THE COMMAND LINE
  301.  
  302. You can operate Freelink from the DOS command line.  There are
  303. no menus or operating modes:  you simply type FREELINK, your
  304. specific command options, and one or more filenames.  If you've
  305. used TLINK or MS Link you'll find it very familiar.  Unlike MS
  306. link, Freelink doesn't prompt you for information it doesn't
  307. have.  Like TLINK, Freelink lets you create a .COM file directly
  308. and expects you to supply all necessary information on the
  309. command line (or from a response file, which is simply a file
  310. containing command line options and filenames).
  311.  
  312. Use this format for running Freelink from the DOS prompt:
  313.  
  314.   Freelink [command options] object_files[,[program_file]
  315.            [,[map_file][,[library_files]]]][;]
  316.  
  317. The square brackets mean an item is optional.  The brackets
  318. themselves are not used.  For example, [command options] is
  319. replaced by any of the linker command options; you don't
  320. actually use the word options.  And since [command options] is
  321. surrounded by brackets, you don't need command options to run
  322. Freelink.
  323.  
  324. Commas appear as shown.  In cases where you'd use several but
  325. not all of the filenames (for example, a program name, no map
  326. file, and a library name), use commas as separators.  Do not use
  327. commas as separators between the same file types, that is, do
  328. not place commas between different object or library files.
  329.  
  330.  
  331. FILE EXTENSIONS
  332.  
  333. For the file options object_files, program_file, map_file, and
  334. library_files, a default extension is always assumed.  That
  335. means that you may omit a file extension and Freelink will look
  336. for a file by the name given, with a period followed by the
  337. default extension.
  338.  
  339. The default extensions are:
  340.  
  341.   File type              Default Extension
  342.   Program file                .EXE
  343.   Program file (with /c)      .COM
  344.   Map file                    .MAP
  345.   Library file                .LIB
  346.   Overlay file                .OVL
  347.  
  348. In all cases except .OVL files, which are created automatically
  349. by Freelink, you can override the default extension by explicit
  350. use of a different file name and extension.  The .OVL extension
  351. can only be changed with WarpMod's on option.  See the WarpMod
  352. section for more details.
  353.  
  354. object_files is a list of one or more object files.  More than
  355. one may be listed, in which case the names are separated by plus
  356. signs or spaces.  The default extension is .OBJ.  Overlaid
  357. object files are surrounded by parentheses or brackets.  You
  358. must specify at least one .OBJ file.
  359.  
  360. program_file is the name of the .EXE or .COM file Freelink
  361. creates as its output.  A .EXE file is created by default, a
  362. .COM file is created if the /c option has been specified.  If
  363. you don't specify a program file, Freelink uses the name of the
  364. first object module, with an .EXE or .COM extension.
  365.  
  366. map_file is the name of a text file Freelink will create with
  367. information about the .OBJ and .LIB files (for instance, a list
  368. of all public symbols).  The default extension is .MAP.  Map
  369. files are helpful debugging tools.  If you don't specify a
  370. program file Freelink uses the name of the first object module,
  371. with a .MAP extension, if you use the /m or /mx option.
  372.  
  373. library_files is a list of zero or more library files.  More
  374. than one may be listed, in which case the names are separated by
  375. plus signs or spaces.  Overlaid library files are surrounded by
  376. parentheses or brackets.  The default extension is .LIB.
  377.  
  378.  
  379. GENERAL USE
  380.  
  381. Here's how you will commonly use a linker.  Most high-level
  382. languages such as Clipper, Microsoft or Turbo C, or Microsoft
  383. BASIC require at least two files when you link a program:  the
  384. program you wrote, and at least one other file, which usually
  385. has the extension .LIB.  If the program you wrote is made up of
  386. several files, an .OBJ is created for each file and you still
  387. use the .LIB file.  You can also create your own .LIB files
  388. simply by running several .OBJ files through a library utility.
  389. The .LIB files supplied by the manufacturer of your language
  390. contain a large number of pre-written routines that the program
  391. frequently uses.  For example, the code to clear the screen, set
  392. the text mode, open a file, or save a file is used often enough
  393. by the compiler that it is usually collected with many other
  394. routines into a .LIB.  file.  Remember that a .LIB file is
  395. nothing more than one or more .OBJ files connected together into
  396. a single file, along with some indexing information to speed
  397. access to those .OBJ modules within the .LIB.  .LIB files are
  398. also known as runtime libraries.
  399.  
  400. With high-level languages, you almost always use at least two
  401. other files to create a single executable:  an .OBJ file and a
  402. .LIB file.  The command will usually be something like this,
  403. where SOURCE is the filename SOURCE.OBJ, and LIB1 is the runtime
  404. library LIB1.LIB:
  405.  
  406.   freelink source,,,lib1
  407.  
  408. This creates the executable file SOURCE.EXE.
  409.  
  410. If you had two .OBJ files and two .LIB files, the command line
  411. might look like this, where the object files are SOURCE1.OBJ and
  412. SOURCE.OBJ, and the library files are LIB1.LIB and LIB2.LIB:
  413.  
  414.   freelink source1+source,,,lib1+lib2
  415.  
  416. This creates the executable file SOURCE1.EXE.
  417.  
  418. Short programs may not use a .LIB file.  In that case your
  419. command line could be as simple as this:
  420.  
  421.   freelink showvol
  422.  
  423. This creates the executable file SHOWVOL.EXE
  424.  
  425.  
  426. RESPONSE FILES
  427.  
  428. Any command options and file names you type after FREELINK on
  429. the DOS command line can just as easily be contained in a
  430. response file (also called a link file, a command script, or a
  431. script file).  Response files let you localize information in a
  432. way that makes maintenance easier than using batch files.  They
  433. can also be used with a MAKE utility.
  434.  
  435. Linking with a response file
  436.  
  437. This is the format for running Freelink with a response file:
  438.  
  439.   freelink @filename.ext
  440.  
  441. The "@" is typed literally and indicates that the following
  442. identifier isn't an .OBJ file.
  443.  
  444. NOTE:  When using response files, you must specify the file
  445. extension, if any.  Freelink does not assume a .LNK or .RSP file
  446. extension.
  447.  
  448. Using a response file
  449.  
  450. A response file takes the place of information typed after
  451. FREELINK on the DOS command line.  To distinguish between an
  452. object module name and a response file name, precede the name of
  453. a response file with the @ sign.  This "@" designates the file
  454. as a response file, not a .OBJ file.
  455.  
  456. The contents of a response file are exactly what you'd type in
  457. after FREELINK on the DOS command line.  For example, assume you
  458. have a file called NEWDBU1.LNK containing the following two lines:
  459.  
  460.   dbu+dbuview+dbustru+dbuedit+dbuindx+dbucopy+dbuutil+
  461.   dbuhelp,,,clipper+extend
  462.  
  463. In this example, Freelink will look for the following .OBJ
  464. files:
  465.  
  466.      DBU.OBJ             DBUINDX.OBJ
  467.      DBUVIEW.OBJ         DBUCOPY.OBJ
  468.      DBUSTRU.OBJ         DBUUTIL.OBJ
  469.      DBUEDIT.OBJ         DBUHELP.OBJ
  470.  
  471. No program file is specified, so the file DBU.EXE will be
  472. created.  No map file or options are specified, so no map file
  473. will be created.  Freelink will look for two libraries,
  474. CLIPPER.LIB and EXTEND.LIB.
  475.  
  476. Notice that in this example none of the .OBJ or .LIB files are
  477. encased in parentheses.  This means that no overlays are used --
  478. all .OBJ's and .LIB's will be in the root.
  479.  
  480. NOTE:  Throughout this document, the term "root" will indicate
  481. code that is not overlaid.
  482.  
  483. Clipper users will recognize this example as a link response
  484. file to create DBU.EXE, one of the example programs that comes
  485. with Clipper.  (The .OBJ files themselves don't come with
  486. Freelink, but you don't need them for the purposes of this
  487. example.  They're just shown to illustrate a real life use of
  488. response files.)
  489.  
  490. To link and create the program DBU.EXE you would enter the
  491. following at the DOS command line:
  492.  
  493.   freelink  @newdbu1.lnk
  494.  
  495. NOTE:  A response file line length must be 127 characters or
  496. less.
  497.  
  498. Mixing response files with the command line
  499.  
  500. You can mix and match command line options with a response file.
  501. For example, assume you have a response file called NEWDBU2.LNK
  502. containing the following lines:
  503.  
  504.   +(dbuview+dbustru+dbuedit+dbuindx+dbucopy+dbuutil+
  505.   dbuhelp) ovlmgr,,,clipper+extend
  506.  
  507. The only difference from NEWDBU1.LNK is that the first filename,
  508. DBU, is missing and the overlay manager file is included.  To
  509. link DBU you'd use this command line:
  510.  
  511.   freelink  /r /op:m dbu @newdbu2.lnk
  512.  
  513. The response file picks up right where you left off, appending
  514. the first "+" to "dbu" as if the response file and command line
  515. were one.  No program file is specified, so the file DBU.EXE
  516. will be created.  No map file or options are specified, so no
  517. map file will be created.  Freelink will look for two libraries,
  518. CLIPPER.LIB and EXTEND.LIB.
  519.  
  520. Notice that in this example all of the .OBJ files are in
  521. parentheses.  This means that they will be overlaid.  When
  522. overlaying, the overlay manager file OVLMGR.OBJ (or C5OVLMGR.OBJ
  523. for Clipper 5.01) must be included in the object file list.
  524.  
  525. Multiple-line response files
  526.  
  527. If you need to break up a response file into several lines, use
  528. the "+" separator at the end of a line for the lists of .OBJ and
  529. .LIB files.  Commas may be on their own lines.  The example
  530. shown below is a legal way to break up the first example:
  531.  
  532.      dbu+dbuview+dbustru+dbuedit+
  533.      dbuindx+dbucopy+dbuutil+dbuhelp
  534.      ,
  535.      ,
  536.      clipper+
  537.      extend
  538.  
  539. In this example, just like before, Freelink will look for the
  540. following .OBJ files:
  541.  
  542.      DBU.OBJ             DBUINDX.OBJ
  543.      DBUVIEW.OBJ         DBUCOPY.OBJ
  544.      DBUSTRU.OBJ         DBUUTIL.OBJ
  545.      DBUEDIT.OBJ         DBUHELP.OBJ
  546.  
  547. No program file is specified, so the file DBU.EXE will be
  548. created.  No map file or options are specified, so no map file
  549. will be created.  Freelink will look for two libraries,
  550. CLIPPER.LIB and EXTEND.LIB.
  551.  
  552. Notice that in this example none of the .OBJ or .LIB files are
  553. encased in parentheses.  This means that no overlays are used --
  554. all .OBJ's and .LIB's will be in the root.
  555.  
  556. Comments in a response file
  557.  
  558. It is often desirable to put comments into a response file.
  559. This is especially helpful for large response files, sample
  560. response files, or response files which don't get used very
  561. often.  Comments can be inserted into a response file by using
  562. the pound sign ('#') in the first column.  The following
  563. indicates a legal way to break up the previous example:
  564.  
  565.   #
  566.   # Here are my object modules
  567.   #
  568.   dbu+dbuview+dbustru+dbuedit+
  569.   dbuindx+dbucopy+dbuutil+dbuhelp
  570.   #
  571.   # End of object module list, the final
  572.   # line did not have a continuing '+'
  573.   #
  574.   # No executable file specified, use
  575.   # first .OBJ file by default
  576.   #
  577.   ,
  578.   #
  579.   # No map file created
  580.   #
  581.   ,
  582.   #
  583.   # Here are the library files
  584.   #
  585.   clipper+
  586.   extend
  587.  
  588. No program file is specified, so the file DBU.EXE will be
  589. created.  No map file or options are specified, so no map file
  590. will be created.  Freelink will look for two libraries,
  591. CLIPPER.LIB and EXTEND.LIB.
  592.  
  593. Notice that in this example none of the .OBJ or .LIB files are
  594. encased in parentheses.  This means that no overlays are used --
  595. all .OBJ's and .LIB's will be in the root.
  596.  
  597. Direct Library Module Specification
  598.  
  599. Libraries frequently contain modules that can be overlaid and
  600. modules which cannot be overlaid.  In these situations, to be
  601. safe, many developers will put the entire library into the root.
  602. Freelink does not require this practice because you can pull
  603. individual modules out of the library.  This is done by direct
  604. library module specification, also called module extraction.
  605.  
  606. Module extraction is very simple to use.  Just list the name of
  607. the library and a colon, followed by the module name to extract
  608. a particular module from a library.  In the following example,
  609. MODULE1 of LIB1.LIB will be overlaid, while the rest of the
  610. library will be in the root:
  611.  
  612.   /op:m /r (obj1+obj2)+ovlmgr,,, (lib1:module1)+lib1
  613.  
  614. A couple of things to note about module extraction:
  615.  
  616. First, the list of modules to be extracted must come before the
  617. corresponding library or object file to be effective.  Any time
  618. a module is declared twice in an object file list or a library
  619. list, the first reference will be in effect.  Having the library
  620. or object file before the module extraction would negate it's
  621. use.
  622.  
  623. Do this:
  624.  
  625.   /op:m /r (obj1+obj2)+ovlmgr,,, (lib1:module1)+lib1
  626.  
  627. NOT this:
  628.  
  629.   /op:m /r (obj1+obj2)+ovlmgr,,, lib1+(lib1:module1)
  630.  
  631. Second, the list of modules to extract can be overlaid and the
  632. corresponding object or library file can be in the root; or the
  633. list of modules to extract can be in the root and the
  634. corresponding object or library file can be overlaid.  Study the
  635. following two examples to see how this works.
  636.  
  637. Overlaying the library module MODULE1 ONLY:
  638.  
  639.   /op:m /r (obj1+obj2)+ovlmgr,,, (lib1:module1)+lib1
  640.  
  641. Overlaying all of the library EXCEPT MODULE1:
  642.  
  643.   /op:m /r (obj1+obj2)+ovlmgr,,, lib1:module1+(lib1)
  644.  
  645. Using module extraction will slow down the link process, since
  646. the linker must search the entire LIB file for each library
  647. name.  If you use direct library module specification often, you
  648. should consider either using the /ql option or breaking the
  649. overlayable and nonoverlayable portions of the library into
  650. separate libraries that can be overlaid and placed in the root
  651. without using module extraction.
  652.  
  653.  
  654.  
  655. FREELINK OPTIONS
  656. -=-=-=-=-=-=-=-=
  657.  
  658. This section explains Freelink's command options.  These options
  659. can be specified from the DOS command line, in a batch file, or
  660. in a Freelink response file.  The command options are described,
  661. one by one, in alphabetical order.  All options are case
  662. insensitive, e.g. both /c and /C refer to the create COM file
  663. option.
  664.  
  665. NOTE:  The terms "options" and "switches" are synonymous and may
  666. be used interchangeably.
  667.  
  668. Type FREELINK without parameters at the DOS command line for a
  669. summary of the linker options.  Immediately following is the the
  670. option summary you will see, followed by a alphabetic list of
  671. all options described in detail.
  672.  
  673. Freelink 2.50 Copyright 1989-92 Michael Devore and hyperkinetix, inc.
  674. All rights reserved.
  675.  
  676. SYNTAX:  FREELINK [options] object_files[,[program_file][,[map_file]
  677.            [,[library_files]]]][;]
  678.  
  679.          (Items in brackets are optional)
  680.                    or
  681.          FREELINK @response_file
  682.  
  683. NONOVERLAY OPTIONS:
  684.  
  685. /as:<size>     maximum program Allocation Space in paragraphs
  686. /c             create COM file
  687. /clpf          automatic Full link after failed CLiPper incremental link
  688. /clpi          perform CLiPper Incremental link
  689. /clpp:<size>   CLiPper incremental link segment Pad length in bytes
  690. /i             display link process Information
  691. /m             create MAP file
  692. /mx            create MAP file eXpanded version
  693. /nd            No Default libraries
  694. /ql            perform QuickLinker link
  695. /sp            Symbol table Pack for Clipper code
  696. /st:<size>     program STack size in bytes
  697. /tf:<name>     Temporary File name
  698. /w0            Warnings generate an exit code of 0, instead of 1
  699. /xp            use eXPanded memory (EMS) during link
  700. /xt            use eXTended memory (XMS) during link
  701.  
  702. OVERLAY OPTIONS:
  703.  
  704. /clp5[:<name>] automatically overlay CLiPper 5.0x compiled CLIPPER.LIB modules
  705. /ohp:[-]<size> Overlay stasH in EMS exPanded memory, '-' leave free
  706. /oht:[-]<size> Overlay stasH in XMS exTended memory, '-' leave free
  707. /op:[-]<size>  Overlay Pool size in kilobytes, '-' leave free
  708. /op:m          automatically use Overlay Pool Minimum required size
  709. /orp           swap active Overlays at Runtime to EMS 4.0 exPanded memory
  710. /ort           swap active Overlays at Runtime to exTended (XMS) memory
  711. /ou            attempt to place Overlay pool in Upper Memory Block (UMB)
  712. /ox            place Overlay pool in eXpanded memory (EMS) page frame
  713. /ox:e-var      Only use /OX if environment variable set to specified value
  714. /r             Reload active overlays swapped out upon return at same address
  715.  
  716.  
  717. /as:<size>  Set maximum number of allocated paragraphs
  718.  
  719.             <size> is the number of paragraphs.
  720.  
  721. This corresponds to MS Link's CPARMAXALLOC option.  /as sets
  722. the number of paragraphs of memory allocated to a program after
  723. it loads.  Acceptable values are 0-65535, default is 65535.
  724.  
  725. This value can be modified after linking with the WarpMod
  726. utility provided with the Freelink package.
  727.  
  728. In most situations, the default value for the maximum number of
  729. allocated paragraphs (65535) is sufficient.  This value will
  730. rarely need to be modified, but this switch is available for
  731. those situations where it is needed.
  732.  
  733.  
  734. /c              create COM file
  735.  
  736. Freelink generates .EXE files by default.  The /c option directs
  737. Freelink to create a .COM file directly.
  738.  
  739. You can't just create a .COM file at will.  The compiler or
  740. assembler that generated the .OBJ file determines whether it can
  741. be a .COM or .EXE file.  When in doubt, assume .EXE.
  742.  
  743. On the other hand, if you omit the /c option on a file that
  744. should have been linked as a .COM file, you'll get a no stack
  745. segment warning during the link as Freelink creates a .EXE file
  746. with no stack segment.
  747.  
  748. You cannot use overlays with a .COM file.
  749.  
  750.  
  751. /clp5[:<name>]  Overlay clipper 5.0x compiled CLIPPER.LIB
  752.                 modules automatically
  753.  
  754. The /clp5 option automatically overlays selected portions of the
  755. CLIPPER.LIB library for Clipper 5.0x.  These portions are all
  756. those modules that contained compiled Clipper code.  Using this
  757. option can reduce your memory usage by 20-40K.  This is in
  758. addition to the savings created from overlayable CLIPPER.LIB
  759. modules written in C and assembly language that can be
  760. explicitly overlaid via direct library module specification.
  761.  
  762. If the Clipper library has been renamed, <name> is the new name
  763. of the library to automatically overlay Clipper compiled modules
  764. from.  It is an optional parameter but must be preceded by a
  765. colon if it is supplied.
  766.  
  767. The /clp5 switch must come before the library list.
  768.  
  769. CLIPPER.LIB must be explicitly specified in the library list.
  770. In other words, if you use the /clp5 option and CLIPPER.LIB is
  771. specified implicitly through the default libraries Freelink will
  772. fail with an internal error.
  773.  
  774. /clp5 also works with the Summer '87 version of Clipper, but it
  775. will only overlay the ERRORSYS module for a savings of 2K.
  776.  
  777.  
  778. /clpf       Perform full link if Clipper-specific
  779.             incremental link fails
  780.  
  781. This option is used if you want to automatically perform a full
  782. link if a Clipper-specific incremental link fails.
  783.  
  784. By default, Freelink will normally ask you if you would like to
  785. perform a full link if an incremental link fails.  The /clpf
  786. option tells Freelink to bypass the question and automatically
  787. perform a full link when an incremental link fails for any
  788. reason.
  789.  
  790.  
  791. /clpi       Use Clipper-specific incremental link
  792.  
  793. This option is used to take advantage of Freelink's
  794. Clipper-specific incremental link capabilities.  Incremental
  795. linking is a tool for development.  It will drastically cut down
  796. on your linking time because only those object files which have
  797. been modified since the last link will be re-linked.
  798.  
  799. Incremental linking is specified using the /clpi option.  During
  800. the first run of a link using /clpi, a full link is performed
  801. and an incremental link file is created.  The name of the
  802. incremental link file will be the name of the executable file,
  803. with a .ILF extension.  The .ILF file contains information used
  804. during later links of the application.
  805.  
  806. Freelink will attempt to do an incremental link whenever the
  807. /clpi option is used and a .ILF file is present for the
  808. application.  If no .ILF file is present, a new one will be
  809. built for the next incremental link use
  810.  
  811. Incremental link works only with Clipper .OBJ files.  If you
  812. change a non-Clipper object module or any library, the
  813. incremental link will fail and allow you the option of
  814. continuing with a full link.  This will create a new .ILF file.
  815.  
  816. Freelink bases its decision to modify code using the incremental
  817. link based upon the time and date stamp of a file.  If the date
  818. or time stamp of a file has not changed since the last
  819. incremental link, Freelink will assume that no code changes were
  820. made.
  821.  
  822. You can change a symbol name, rearrange variables in the symbol
  823. table, and do some limited addition or deletion of symbol names
  824. and still have a successful incremental link.  Exceeding the pad
  825. length with code changes, adding more than two new symbols, or
  826. changing the position of a procedure within a symbol table will
  827. fail the incremental link, requiring a full link.
  828.  
  829. It is recommended that you perform a full link without the /clpi
  830. option on the final version of your software after development
  831. is complete.
  832.  
  833. Using the /clpi switch will add to the size of your .EXE file.
  834. Freelink must make allowances for new code in your .EXE file, so
  835. it adds some free space for later changes.  See the explanation
  836. of the /clpp option for more complete information on this .EXE
  837. file "padding."
  838.  
  839. .ILF files must be in the current directory or they will not be
  840. found.
  841.  
  842. The /clpi and /sp options cannot be used together (you cannot
  843. perform symbol compaction on an incrementally linked file).
  844. Whichever one is specified last will be the one used.
  845.  
  846.  
  847. /clpp:<size>   Set "pad" size for Clipper-specific incremental
  848.                link
  849.  
  850.                <size> is the size of the segment pad value for
  851.                incremental linking.
  852.  
  853. This option changes the default value for the size of the
  854. segment pad.  This is the number of bytes that you can safely
  855. add to each Clipper procedure after the initial link without
  856. causing the incremental link to fail.
  857.  
  858. The acceptable range is 0-255.  The default value is 48.
  859.  
  860. A non-zero pad value will increase the size of the Clipper
  861. procedures (in an overlay or the root) in your program.  The
  862. larger your pad value, the greater the increase.
  863.  
  864.  
  865. /i          Display link process information
  866.  
  867. This option provides information about what the linker is doing,
  868. as it is doing it.  It is useful if you want to assure yourself
  869. that the linker is really working during long links, like
  870. something to look at during the link, or just want to see what
  871. parts of the link process take the most time.
  872.  
  873. Use of this option may help you troubleshoot any problems with
  874. Freelink.
  875.  
  876. Entry to and exit from the main routines in the link process are
  877. displayed, as well as the file names of object files and library
  878. files currently being processed.  You'll probably notice that
  879. libraries take up much of the link time -- this is pretty
  880. typical.
  881.  
  882.  
  883. /m          Create map file
  884.  
  885. A map file contains the size and placement of code, data, and
  886. stack segments in a program (in hex, or base 16) and program
  887. entry information.
  888.  
  889. Freelink map files are compatible with those created by MS LINK.
  890. You can get more detailed information by using the /mx option,
  891. which gives you expanded map files.
  892.  
  893.  
  894. /mx         Create expanded map file
  895.  
  896. The expanded map file option offers more detailed map
  897. information, useful for debugging and for seeing how space is
  898. used in each segment.  It's handy, for example, if you're an
  899. assembly language programmer and wonder why a segment is the
  900. wrong size.  This might show you that you left the trailing "h"
  901. off of a number that's supposed to be hex.  It's also good for
  902. detecting the source of a segment overflow (a segment larger
  903. than 64K).
  904.  
  905. The extended map file also lists the names and addresses of
  906. public symbols.
  907.  
  908.  
  909. /nd         No default libraries
  910.  
  911. Most high-level language translators/compilers/assemblers insert
  912. the standard name of a runtime library directly into the .OBJ
  913. file itself so that it doesn't have to be specified on the
  914. command line.  That .LIB is called the default library.  You
  915. can stop Freelink from using that library by using the /nd
  916. option.
  917.  
  918.  
  919. /ohp:[-]<size>  Overlay stash in EMS 4.0 expanded memory
  920.  
  921.                 '-' leave free
  922.                 <size> can range from 0 to 16383.
  923.  
  924. This option stashes the overlay file to EMS memory.  The
  925. overlays are stashed as they are loaded for the first time in
  926. the overlay pool, as memory allows.  Thereafter, if the overlay
  927. must be reloaded, it will be brought in from EMS memory rather
  928. than from disk.  Stashing can provide substantial speed
  929. increases in the executing program.  Partial stashing of some
  930. overlays in the overlay file may occur if there is not enough
  931. memory to stash all of them.  Overlays are placed in EMS on a
  932. first loaded, first stashed-as-fits, basis.
  933.  
  934. /ohp logically follows the /op usage.  Values are in kilobytes.
  935. Because EMS pages are allocated in 16K pages, you should use a
  936. multiple of 16K.  (Odd amounts are rounded up, e.g. /ohp:120  is
  937. the same as /ohp:128.)  A minus sign means leave the amount
  938. free, e.g. /ohp:-1024  means leave 1024K (1M) for the executing
  939. program and take the rest for stashing overlays, up to the space
  940. required.  The overlay manager will not take more EMS memory
  941. than it needs even if you specify more with the /ohp option.
  942. For example, if you specify /ohp:4096  and the overlay manager
  943. only needs 640K to stash the entire overlay file, 640K of EMS is
  944. all that the overlay manager will allocate.
  945.  
  946. /ohp detects EMS 4.0 automatically and uses an enhanced stashing
  947. algorithm if EMS 4.0 (supporting direct lower memory mapping) is
  948. available.  The direct memory mapping algorithm is more speed
  949. efficient than the EMS 3.x algorithm of copy-to-page,
  950. map-out-page, map-in-page, and copy-from-page.
  951.  
  952. /ohp overlay file stashing will not occur if the overlay manager
  953. detects less than 80K free EMS or an EMS driver is not present.
  954.  
  955. /ohp is more generically useful than /orp but both can be used
  956. simultaneously.  /orp will stash an exact image of a
  957. swapped-out, active overlay for return swap- in, thus
  958. eliminating the need for the overlay manager to process and fix
  959. up overlay offsets when the active overlay is brought back in.
  960. Typically, you will find a much greater speed increase with /ohp
  961. stashing, but /orp can also speed up an application if there are
  962. many active overlay swap-outs.  /ohp allocates EMS after /orp
  963. does its 128K fixed allocation.  If you have a small amount of
  964. EMS, it is recommended that you use /ohp rather than /orp.
  965.  
  966. Use of /ox precludes EMS 3.x overlay file stashing.  The /ox
  967. option automatically shuts off stashing because EMS 3.x must map
  968. into the EMS page frame that /ox uses.  If you use /ohp and /ox,
  969. and the /ohp routines detect EMS 3.x usage, then stashing an
  970. overlay file to EMS will be automatically shut off at runtime.
  971. Note that it is always safe to specify both the /ox and /ohp
  972. options.  If /ohp detects EMS 4.0 support, then simultaneous use
  973. of the EMS page frame for the overlay pool and the stashing of
  974. the overlay files to EMS will occur.
  975.  
  976. All EMS memory allocated for use by /ohp is automatically freed
  977. at program termination.  An initial setting of /ohp:-512  for
  978. Clipper applications is recommended.  This guarantees 512K of
  979. EMS remains for your application, plus whatever may be left over
  980. from stashing the overlay file.  In particular, it is not
  981. recommended that a Clipper 5.01 program have no EMS available to
  982. it during execution.  (You can quickly change the /ohp setting
  983. with WarpMod, if necessary or desired.)  If your application has
  984. no need for EMS, then use a large /ohp setting to stash the
  985. entire overlay file.  For example, use a setting of /ohp:16383.
  986.  
  987. See also the /orp option.
  988.  
  989.  
  990. /oht:[-]<size>  Overlay stash size for XMS, extended memory,
  991.  
  992.                 '-' leave free
  993.                 <size> can range from 0 to 16383.
  994.  
  995. This option stashes the overlay file to XMS memory.  The
  996. overlays are stashed as they are loaded for the first time in
  997. the overlay pool, as memory allows.  Thereafter when reloaded,
  998. the overlay will be brought in from XMS memory rather than from
  999. disk.  Stashing can provide substantial speed increases in the
  1000. executing program.  Partial stashing of some overlays in the
  1001. overlay file may occur if there is not enough memory to stash
  1002. all of them.  Overlays are stashed on a first loaded, first
  1003. stashed-as-fits, basis.  /oht overlay file stashing will not
  1004. occur if the overlay manager detects less than 80K free XMS or
  1005. an XMS driver is not present.
  1006.  
  1007. /oht logically follows the /op usage.  Values are in kilobytes.
  1008. A minus sign (-) means leave the amount free, e.g. /oht:-1024
  1009. means leave 1024K (1M) for the executing program and take the
  1010. rest for stashing overlays, up to the space required.  The
  1011. overlay manager will not take more XMS memory than it needs even
  1012. if you specify more with the /oht option.  For example, if you
  1013. specify /oht:4096  and the overlay manager only needs 640K to
  1014. stash the entire overlay file, 640K of XMS is all that the
  1015. overlay manager will allocate.
  1016.  
  1017. /oht is more generically useful than /ort but both can be used
  1018. simultaneously.  /ort will stash an exact image of a swapped-out
  1019. active overlay for return swap-in, eliminating the need for the
  1020. overlay manager to process and fix up overlay offsets when the
  1021. active overlay is brought back in.  Typically, you will find a
  1022. much greater speed increase with /oht stashing, but /ort can
  1023. also speed up an application if there are many active overlay
  1024. swap-outs.  /oht allocates XMS after /ort does its 128K fixed
  1025. allocation.  If you have a small amount of XMS, it is
  1026. recommended that you use /oht rather than /ort.
  1027.  
  1028. All XMS memory allocated for use by /oht is automatically freed
  1029. at program termination.
  1030.  
  1031. An initial setting of oht:-512 for Clipper applications is
  1032. recommended.  This guarantees 512K of XMS remains for your
  1033. application, plus whatever may be left over from stashing the
  1034. overlay file.  Clipper cannot use XMS directly, but many memory
  1035. managers, such as QEMM and 386^Max, automatically convert XMS to
  1036. EMS.  It is not recommended that a Clipper 5.01 program have no
  1037. EMS available to it during execution.  (You can quickly change
  1038. the /oht setting with WarpMod, if necessary.)  If your
  1039. application has no need for XMS or converted EMS, then use a
  1040. large /oht setting to stash the entire overlay file.  For
  1041. example, use a setting of /oht:16383.
  1042.  
  1043. See also the /ort option.
  1044.  
  1045.  
  1046. /op:[-]<size>  Overlay pool size
  1047.               <size> is the size of the overlay pool in
  1048.               kilobytes.
  1049.  
  1050. The /op option lets you control how much memory is used for
  1051. overlays.  The section of memory in which overlay code is stored
  1052. is known as the overlay pool.  Memory is allocated on startup.
  1053. If you want to limit the amount of memory used or change the
  1054. method currently employed, use this option.
  1055.  
  1056. The overlay pool is a key piece of Freelink.  Overlaid functions
  1057. are swapped in and out of this overlay pool area only.  A
  1058. Freelink'd application will not wildly grab any available
  1059. memory.  When the overlay pool area is full, functions will be
  1060. swapped out of the overlay pool until they are needed again.
  1061.  
  1062. The minus sign is optional and means let all except <size>
  1063. kilobytes be used for the memory pool.  For example, /op:-100
  1064. would mean that all except 100K of system memory is available
  1065. for overlays.  The minus sign should not usually be used with
  1066. Clipper applications.
  1067.  
  1068. Omitting the minus sign means that only the specified amount of
  1069. memory (in K) will be used.  So if you've used the /op:48 option
  1070. your application will reserve 48K of RAM for the overlay pool at
  1071. startup.  All overlaid functions will be swapped in and out of
  1072. this area.
  1073.  
  1074. Freelink is preset to use all except 144K for the overlay pool,
  1075. as if you'd used the /op:-144 option.
  1076.  
  1077. This value can be modified after linking with the WarpMod
  1078. utility provided with the Freelink package.
  1079.  
  1080.  
  1081. /op:m       Automatically use overlay pool minimum size
  1082.  
  1083. The /op:m option is a variation of the /op option.  /op:m
  1084. automatically sets the size of the overlay pool to be the
  1085. minimum size, as calculated by Freelink during linking.  This
  1086. option takes the guesswork out of having to calculate the
  1087. smallest possible overlay pool size for your application.
  1088.  
  1089. If the /r option is also used, the minimum required overlay pool
  1090. size will be calculated and assigned.  (This will be roughly
  1091. equivalent to two times the largest overlaid segment plus the
  1092. second largest overlaid segment minus one.) Otherwise, the
  1093. absolute minimum overlay pool size is used, that is, the size of
  1094. the largest overlaid segment.
  1095.  
  1096. The overlay pool size  value can be modified after linking with
  1097. the WarpMod utility provided with the Freelink package, should
  1098. you feel that program operation speed using overlays is too
  1099. slow.  Often a minor increase in pool size of 5-15K can provide
  1100. dramatic speed increases in applications slowed by overlays.
  1101. Please see the WarpMod section for more information on this
  1102. utility.
  1103.  
  1104.  
  1105. /orp        Swap active overlays at runtime to EMS 4.0, expanded
  1106.             memory
  1107.  
  1108. The /orp option allocates a 128K swap area in expanded memory
  1109. and swaps active overlays out to it.  The last swapped overlay
  1110. has priority over earlier ones if more than 128K of active
  1111. overlays are swapped-out.  As a result, self-modifying code or
  1112. code segment relative data in an active swapped-out overlay
  1113. keeps any transient changes if the total swap-outs don't
  1114. overflow the 128K buffer, thereby forcing the overlay to be read
  1115. from disk, EMS, or XMS stash.
  1116.  
  1117. Because the /orp switch swaps directly to lower memory from EMS
  1118. and not through the EMS page frame, it requires EMS 4.0 -- not
  1119. 3.2 -- compatibility.  All 80386s supporting EMS should have
  1120. this capability, but many 80286s and 8088s may not.  It depends
  1121. upon the EMS card or motherboard, as well as the age of the
  1122. machine.
  1123.  
  1124. The 128K of EMS memory allocated for use by /orp is
  1125. automatically freed at program termination.
  1126.  
  1127. If you use the /orp option, the Clipper 5.01 debugger CLD.EXE
  1128. will not function with your program.  Use WarpMod to turn this
  1129. option off and on quickly, if necessary.
  1130.  
  1131. See also the /ohp option.
  1132.  
  1133.  
  1134. /ort        Swap active overlays at runtime to XMS, extended
  1135.             memory
  1136.  
  1137. The /ort option allocates a 128K swap area in extended memory
  1138. and swaps active overlays out to it.  The last swapped overlay
  1139. has priority over earlier ones if more than 128K of active
  1140. overlays are swapped-out.
  1141.  
  1142. Applications using /orp may execute somewhat faster than those
  1143. using /ort because /orp maps, rather than copies, the overlay
  1144. image to memory.
  1145.  
  1146. The 128K of XMS memory allocated for use by /ort is
  1147. automatically freed at program termination.
  1148.  
  1149. If you use the /ort option, the Clipper 5.01 debugger CLD.EXE
  1150. will not function with your program.  Use WarpMod to turn this
  1151. option off and on quickly, if necessary.
  1152.  
  1153. See also the /oht option.
  1154.  
  1155.  
  1156. /ou         Attempt to place overlay pool in Upper Memory Block
  1157.            (UMB)
  1158.  
  1159. This option places the overlay pool in an Upper Memory Block,
  1160. using the specified overlay pool size (/op).  If there is not
  1161. enough room or UMBs are not supported on the machine running the
  1162. overlaid program, conventional memory will be used.
  1163.  
  1164. All UMB memory allocated for use by /ou is automatically freed
  1165. at program termination.
  1166.  
  1167. If you use the /ou option, the Clipper 5.01 debuggger CLD.EXE
  1168. will not function with your program.  Use WarpMod to turn the
  1169. option on and off quickly, if necessary.
  1170.  
  1171.  
  1172. /ox:[e-var]  Place overlay pool in EMS page frame, if
  1173.              environment variable is set to specified value
  1174.  
  1175.              [e-var] is the setting of an environment variable
  1176.              that tells Freelink to use the EMS page frame ONLY
  1177.              if the listed environment variable is set to the
  1178.              specified value.
  1179.  
  1180. Using the /ox option will tell the Freelink overlay manager to
  1181. automatically put the overlay pool into expanded memory (EMS)
  1182. when the application runs.  This allows applications to make the
  1183. most efficient use of the memory available on the target
  1184. machines.
  1185.  
  1186. The /ox option supersedes the /op setting completely, placing a
  1187. fixed 63K overlay pool at the EMS page frame.
  1188.  
  1189. If no, or insufficient, EMS is present when the application
  1190. starts up, then the overlay pool will be established in normal
  1191. RAM with the pool size depending upon the size specified by the
  1192. /op switch.  (If no /op switch was used, the default value of
  1193. -144 will be used.)  This will be extremely helpful for
  1194. applications that are running on a variety of platforms --
  1195. Freelink can optimize the application depending on the memory
  1196. configuration of each machine.  Therefore, it is a good idea to
  1197. use both the /ox and /op switches if the application will be
  1198. running on various machine configurations.
  1199.  
  1200. If the application requires more than a 63K overlay pool, do not
  1201. use the /ox option.
  1202.  
  1203. The optional [e-var] parameter allows use of an environment
  1204. variable to trigger EMS overlay pool area use.  For example, if
  1205. you linked with /ox:OVLEMS=ON,  the EMS page frame would be used
  1206. only if you had SET OVLEMS=ON.  Otherwise the specified (or
  1207. default) /op overlay pool size used would be in conventional
  1208. memory.
  1209.  
  1210. The environment variable is case sensitive for the setting used.
  1211. That is, /ox:OVLEMS=on  does not match SET OVLEMS=ON.  DOS will
  1212. automatically capitalize the environment variable (but not its
  1213. setting).  Therefore, using /ox with any lowercase environment
  1214. variable will always cause the search to fail.  In other words,
  1215. /ox:ovlems=ON will not match SET ovlems=ON; use SET OVLEMS=ON.
  1216.  
  1217. The search ends successfully when the target environment string
  1218. is located.  If the setting contains more characters than the
  1219. option, the extras are ignored.  For example, if you SET
  1220. OVLEMS=ONRIGHTNOW, and use /ox:OVLEMS=ON, it will still match
  1221. the OVLEMS environment variable.
  1222.  
  1223. You can use whatever environment names and settings you like.
  1224. For example, /ox:COW=MOO is legitimate and will match SET
  1225. COW=MOO.
  1226.  
  1227. However, do not use blanks in the environment variable or
  1228. setting.  The environment variable and setting, including the
  1229. equal sign (=), must not exceed 31 characters or you will get an
  1230. invalid option error message.
  1231.  
  1232. Use of /ox precludes EMS 3.x overlay file stashing.  The /ox
  1233. option automatically shuts off stashing because EMS 3.x must map
  1234. into the EMS page frame that /ox uses.  If you use /ohp and /ox,
  1235. and the /ohp routines detect EMS 3.x usage, then stashing an
  1236. overlay file to EMS will be automatically shut off at runtime.
  1237. Note that it is always safe to specify both the /ox and /ohp
  1238. options.  If /ohp detects EMS 4.0 support, then simultaneous use
  1239. of the EMS page frame for the overlay pool and the stashing of
  1240. the overlay files to EMS will occur.
  1241.  
  1242. All EMS memory allocated for use by /ox is automatically freed
  1243. at program termination
  1244.  
  1245. If you use the /ox option, the Clipper 5.01 debugger CLD.EXE
  1246. will not function with your program.  Use WarpMod to turn this
  1247. option off and on quickly, if necessary.  The /ox option
  1248. requires using the BADCACHE setting with Clipper 5.01 programs
  1249. and turning off EMS use (SET CLIPPER=E0) with Clipper Summer '87
  1250. programs.
  1251.  
  1252.  
  1253. /ql         Perform QuickLinker link
  1254.  
  1255. This option creates a file with the extension QLK.  The file
  1256. contains information about the library modules linked into the
  1257. application.
  1258.  
  1259. The first use of /ql will create a QLK file, causing a slightly
  1260. slower link.  Subsequent links will use the existing QLK file
  1261. and should link faster.  It is legitimate to alternate linking
  1262. with and without using /ql.   The QLK file will only be accessed
  1263. (or created) when /ql is specified, otherwise the link proceeds
  1264. normally.
  1265.  
  1266. Use of /ql presumes that you will not change your libraries
  1267. (count, order, and version) between links.  Therefore, it is not
  1268. recommended that you use /ql if you change libraries frequently.
  1269. If you do change your library setup, delete the old .QLK file or
  1270. else you may receive internal errors from the linker when using
  1271. the /ql option as it tries to use old, invalid, library
  1272. information.
  1273.  
  1274. With direct library module specification, the speed increase
  1275. gained by using /ql can be simply breathtaking.  Depending upon
  1276. the number of libraries and modules specified, you may see the
  1277. link speed increase up to three times the normal link speed.
  1278. The more library modules specified, the greater the increase in
  1279. speed by using /ql.  Without direct library module
  1280. specification, speed increases are more modest, typically
  1281. 10%-40% increase in link speed.
  1282.  
  1283. Over time, if your application links in new library modules,
  1284. your QLK file will lose efficiency because it appends the new
  1285. library module information at the end of the file, and causes
  1286. more passes than a standard link.  Also, old library modules
  1287. that are no longer used will continue to be linked, causing
  1288. increased memory overhead.  To remedy either of these
  1289. conditions, simply delete the QLK file and use the /ql option to
  1290. build a new file containing your new library use structure.
  1291.  
  1292. If you interrupt linking during the creation of a QLK file so
  1293. that it is not completely built, you should delete the QLK file
  1294. before re-linking or it may cause internal errors.
  1295. (Interruption during access of a pre-existing QLK file does no
  1296. harm.)
  1297.  
  1298. If you use either the /ql or /clpi option with direct library
  1299. module specification, you MUST place the option before the
  1300. library list in the link file.  If these options are not placed
  1301. before the library list, you will receive internal errors due to
  1302. irreversible processing of the library modules that requires
  1303. those options not be altered after libraries are processed.  For
  1304. example, these options execute successfully:
  1305.  
  1306. freelink /clpi /ql /op:m /r objmodule,exename,,lib1:mod1 lib2
  1307.  
  1308. Do NOT use options in this order:
  1309.  
  1310. freelink /op:m /r objmodule,exename,,lib1:mod1 lib2 /clpi /ql
  1311.  
  1312. If you experience internal errors, unresolved external warning
  1313. messages, or linking of unwanted library modules when using /ql,
  1314. delete the old QLK file and relink using the /ql option.
  1315.  
  1316.  
  1317. /r             Reload active overlays swapped out upon return at
  1318.                same address
  1319.  
  1320. The /r option forces swapped out, but still active, overlays to
  1321. be reloaded at the same address when the overlay which swapped
  1322. them out returns.  The /r option also allows an overlay calling
  1323. the root, either directly or indirectly, to be safely swapped
  1324. out by other overlays before the calling overlay is returned to.
  1325.  
  1326. The reload overlay option is required for Clipper programs
  1327. because Clipper uses executable code as data and parses data
  1328. tokens in the executable code segment.  If an active overlay is
  1329. swapped out and brought back in at a different address, Clipper
  1330. may look at the original address where the routine was loaded
  1331. for the next command and interpret whatever random values are
  1332. there instead, with predictably poor results.
  1333.  
  1334. The /r option should also be used in the following situation: if
  1335. an application performs indirect far calls (i.e. through a
  1336. pointer) from an overlay to the root and there is a possibility
  1337. that the root code will in turn call other overlays which cause
  1338. swapout of the original root-calling overlay.  This will keep
  1339. the far address saved on the application stack as a valid return
  1340. address.  Otherwise, the original overlay that called the root
  1341. and was then swapped out may reload in a different area of the
  1342. overlay pool.  This would cause program failure when the program
  1343. attempts to return to the original overlay at the address saved
  1344. on the stack.  This is not a problem with near calls since the
  1345. offset of the address saved on the stack is always correct.
  1346.  
  1347.  
  1348. /sp         Symbol table Pack for Clipper code
  1349.  
  1350. This option automatically packs the symbol table for Clipper
  1351. Summer '87 and Clipper 5.01 code.  Using /sp turns off the use
  1352. incremental linking.  The option specified last will be used.
  1353.  
  1354. /sp uses more memory than normal links.  If you have out of
  1355. memory problems, you may have to free up memory by:  removing
  1356. device drivers or TSRs, changing or not using a make utility or
  1357. (worst case) using the stand-alone post-link symbol compaction
  1358. utility, SP.EXE.  Note that SP.EXE is only available with the
  1359. WarpLink package.
  1360.  
  1361.  
  1362. /st:<size>  Set program stack
  1363.  
  1364.             <size> is stack size, in bytes.
  1365.  
  1366. This option allows you to modify the application's stack.  This
  1367. will override the stack created by the compiler/assembler which
  1368. created the .OBJ file.  It corresponds to the MS Link option of
  1369. the same name.
  1370.  
  1371. This value can be modified after linking with the WarpMod
  1372. utility provided with the Freelink package.  Please see
  1373. the WarpMod section for more information on this utility.
  1374.  
  1375. In most situations, the default value for the program stack size
  1376. that is set by your compiler is sufficient.  This value will
  1377. rarely need to be modified, but this switch is available for
  1378. those situations where it is needed, as in an application stack
  1379. overflow or underflow situation.
  1380.  
  1381.  
  1382. /tf:<name>  Temporary file name
  1383.  
  1384. The /tf:<name> option allows you to specify, with optional full
  1385. path and drive specification, the name of the temporary file to
  1386. be created on disk.  A temporary file is necessary during the
  1387. link when the program image is too large to fit in conventional
  1388. memory and cannot fit into EMS or XMS, or the /xp and /xt switch
  1389. is not used.
  1390.  
  1391. This option is very useful if the development machine uses RAM
  1392. disks or "fast" disks.
  1393.  
  1394. This option is similar to the WORKFILE command of PLink and
  1395. .RTLink.
  1396.  
  1397.  
  1398. /w0         Set ERRORLEVEL to 0 for warnings
  1399.  
  1400. Using this option will set the DOS ERRORLEVEL to 0 when warning
  1401. messages are encountered.  In certain situations, especially
  1402. when using some MAKE utilities, having a DOS ERRORLEVEL of
  1403. anything greater than zero will cause the MAKE file to stop with
  1404. an error.  This option allows you to override Freelink's default
  1405. ERRORLEVEL of 1 for warnings so that your MAKE file can properly
  1406. operate.  Fatal errors will continue to return ERRORLEVEL codes
  1407. of 2 and above.
  1408.  
  1409.  
  1410. /xp         Use expanded memory (EMS) during link
  1411.  
  1412. The /xp option stashes the overlay file and the temporary file
  1413. (if any) in expanded memory, assuming an EMS driver is present.
  1414. This will speed up the link process considerably.
  1415.  
  1416. To determine expanded memory requirements for the /xt option use
  1417. the following formulas.  Take the overlay file size (OVL file)
  1418. and round UP to the next 16K boundary.  This is the amount of
  1419. EMS required by Freelink to stash the overlay file.  If there is
  1420. enough free extended memory left over, /xp will stash the
  1421. temporary file IF one is necessary -- otherwise the file image
  1422. stays in regular memory and no temporary file is created.  To
  1423. determine temporary file size, take the load image size of the
  1424. EXE file, NOT the actual EXE size with or without internal
  1425. overlays, and round UP to the next 16K boundary.
  1426.  
  1427. This stash order used by Freelink for the /xp option is in
  1428. accord with speedup priority, i.e.  stashing the overlay file
  1429. typically speeds link times more than stashing the temporary
  1430. file.  If the overlay file will not fit into expanded memory,
  1431. but the temporary file will, then the temporary file will still
  1432. be stashed.
  1433.  
  1434. If you have a dual XMS and EMS driver, such as QEMM or 386^Max,
  1435. you may want to choose the /xt option instead of the /xp option
  1436. in lower free EMS/XMS memory circumstances.  Since the /xp
  1437. starts by stashing object modules, it may run out free EMS
  1438. before the temporary file and the overlay file are stashed,
  1439. forcing a reflush of object modules situation.  However,
  1440. stashing the temporary file and the overlay file provide the
  1441. most dramatic performance increases.  Since the /xt option only
  1442. stashes these two files, it applies all free memory to that
  1443. task.  Also, extended memory is frequently slightly faster to
  1444. access than expanded memory.  Of course, if you do have enough
  1445. EMS to stash both object modules and the overlay and temporary
  1446. file, using the /xp option will be faster than the /xt option.
  1447.  
  1448. It is possible to use both the /xp and /xt options
  1449. simultaneously, with Freelink giving preference for stashing the
  1450. temporary and overlay file to XMS.  Remember though, that if you
  1451. have a dual EMS/XMS driver, Freelink will eat all free memory
  1452. through the /xp option and leave no free memory for the /xt
  1453. option, effectively negating its use.  You need separate EMS and
  1454. XMS allocations to use both the /xp and /xt options to any
  1455. effect for the /xt option.
  1456.  
  1457.                                    Option to Use
  1458.       Memory Configuration         /xp       /xt
  1459.       --------------------        -----     -----
  1460.       EMS Only                     Yes       No
  1461.       XMS Only                     No        Yes
  1462.       EMS and XMS                  Yes       Yes
  1463.       EMS or XMS*                  No        Yes
  1464.  
  1465. * Note:  Having a "dual" EMS and XMS driver (such as QEMM or
  1466. 386^Max), you can use both options simultaneously.  However, it
  1467. is recommended that the /xt option is used alone, as it is
  1468. usually slightly faster.
  1469.  
  1470.  
  1471. /xt         Use extended memory (XMS) during link
  1472.  
  1473. The /xt option stashes the overlay file and the temporary file
  1474. (if any) in extended memory, assuming an XMS driver is present.
  1475. This will speed up link time significantly.
  1476.  
  1477. This stash order used by Freelink for the /xt option is in
  1478. accord with speedup priority.  For example, stashing the overlay
  1479. file typically speeds link times more than stashing the
  1480. temporary file.  But if the overlay file will not fit into
  1481. extended memory, but the temporary file will, then the temporary
  1482. file will still be stashed.
  1483.  
  1484. If you have a dual XMS and EMS driver, such as QEMM or 386^Max,
  1485. you will want to choose the /xt option instead of the /xp option
  1486. in lower free EMS/XMS memory circumstances.  This will make the
  1487. most efficient use of your memory configuration.
  1488.  
  1489. It is possible to use both the /xp and /xt options
  1490. simultaneously, with Freelink giving preference for stashing the
  1491. temporary and overlay file to XMS.  Remember though, that if you
  1492. have a dual EMS/XMS driver, Freelink will eat all free memory
  1493. through the /xp option and leave no free memory to the /xt
  1494. option, effectively negating its use.  You need separate EMS and
  1495. XMS allocations to use both the /xp and /xt options to any
  1496. effect for the /xt option.
  1497.  
  1498.                                    Option to Use
  1499.       Memory Configuration         /xp       /xt
  1500.       --------------------        -----     -----
  1501.       EMS Only                     Yes       No
  1502.       XMS Only                     No        Yes
  1503.       EMS and XMS                  Yes       Yes
  1504.       EMS or XMS*                  No        Yes
  1505.  
  1506. * Note:  Having a "dual" EMS and XMS driver (such as QEMM or
  1507. 386^Max), you can use both options simultaneously.  However, it
  1508. is recommended that the /xt option is used alone, as it is
  1509. usually slightly faster.
  1510.  
  1511.  
  1512.  
  1513. WARPMOD UTILITY
  1514. -=-=-=-=-=-=-=-
  1515.  
  1516. WarpMod is a command-line utility program designed to allow
  1517. "fine tuning" of overlaid or nonoverlaid .EXE programs created
  1518. with the Freelink or WarpLink linker, without the need for
  1519. complete re-linking.  This is especially helpful when
  1520. adjustments must be made "in the field", and the necessary .OBJ
  1521. files are not available for a re-link.
  1522.  
  1523. WarpMod is very simple to use, and employs a command syntax very
  1524. similar to Freelink's.  Modifiable environmental and Overlay
  1525. Manager parameters from the target file are displayed, and
  1526. optionally reset.  Additionally, the target's original date and
  1527. time- stamp may be preserved if desired.
  1528.  
  1529. WarpMod allows you to make interactive changes, supporting quick
  1530. keys and cursor movement keys.
  1531.  
  1532. WarpMod also accepts command line arguments, bypassing the
  1533. interactive ability for batched or simple changes.  You can
  1534. precede an option with '/'  or '-', or forego these symbols.
  1535. Use a trailing plus (+) sign to turn on an option.  Use a
  1536. trailing minus (-) sign to turn off an option.  For example:
  1537.  
  1538. WARPMOD PROGRAM.EXE -d op:32 /ort-  orp+ /ox:A=B  st:3334 -ohp:0
  1539.   ou oht:-512
  1540.  
  1541.      *  preserves the original date of the EXE file,
  1542.      *  gives an overlay pool size of 32K,
  1543.      *  turns off the /ort option,
  1544.      *  turns on the /orp option,
  1545.      *  turns on the /ox option with environment variable A=B,
  1546.      *  sets the stack to 3334 bytes,
  1547.      *  turns off the /ohp option,
  1548.      *  turns on the /ou option, and
  1549.      *  turns on the /oht option with a value of -512.
  1550.  
  1551. WARPMOD will prompt for the filename if none is supplied.
  1552.  
  1553. Do not change the /ol or /os settings unless you are absolutely
  1554. sure of the result.  The default settings should be maintained
  1555. in almost all cases.
  1556.  
  1557. This utility is identical to the one included with WarpLink.
  1558.  
  1559.  
  1560.  
  1561. INTERACTIVE WARPLINK UTILITY
  1562. -=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1563.  
  1564. Interactive WarpLink is a front-end, user interface for Freelink
  1565. and WarpLink.  It is a heavily modified and debugged version of
  1566. Al Stevens' D-Flat Version 6 application, as published in Dr.
  1567. Dobb's Journal magazine.  Using Interactive WarpLink is similar
  1568. to using other windowed user interfaces.  If a mouse is
  1569. detected, it will automatically be enabled.
  1570.  
  1571. Starting Interactive WarpLink
  1572.  
  1573. Start Interactive WarpLink by entering IW at the DOS prompt.
  1574. Four windows are visible upon start-up.  The left-most window
  1575. (#1) contains the object modules to be linked.  The next window
  1576. to the right (#2) contains libraries.  Note that it is not
  1577. necessary to use plus (+) signs at the ends of lines in either
  1578. window.  Interactive WarpLink will perform most housekeeping
  1579. chores for you, including adding plus signs where needed.
  1580.  
  1581. The window farthest to the right (#3) contains link options.
  1582. Set or reset various link options in this window by using the
  1583. cursor keys (or mouse) to select an option and then pressing the
  1584. SPACEBAR.  Interactive WarpLink prompts you for additional
  1585. settings with some link options.  Two link options have optional
  1586. settings: /CLP5  and /OX.  Other options have required settings.
  1587. All additional settings are retained once the corresponding
  1588. options are turned off.  In the Link Options window, you may
  1589. explicitly set the EXE (or COM) and MAP filename.  Note that
  1590. since Interactive WarpLink is used by both Freelink and
  1591. WarpLink, there are options available for selection that can
  1592. only be used by WarpLink.  Do not select these Interactive
  1593. WarpLink options with Freelink or else you will receive an error
  1594. when attempting to link.  The options not supported by Freelink
  1595. are:  /b, /wn /clps, /cla, /d, /ddl, /dm, /em, /s, /udl, /oc,
  1596. /ohp3, /oi, /ol, /on, and /os.
  1597.  
  1598. The window near the bottom of the screen, Link File Name (#4),
  1599. contains the default link file name to which you save changes.
  1600.  
  1601. A fifth window only appears after you link using Interactive
  1602. WarpLink.  It will show any errors or warnings that occur during
  1603. the link.  Following a link without errors, you will see an
  1604. Information Box the states no errors were found.  Although the
  1605. Error Log window (#5) is always present, it is not usually
  1606. visible because the other four windows cover it.
  1607.  
  1608. To restore any of the windows that are not (fully) visible, use
  1609. the dropdown menus or the shortcut keys.  The window shortcut
  1610. keys are ALT-1, ALT-2, ALT-3, ALT-4, and ALT-5.  (The number
  1611. corresponds to the window number.)
  1612.  
  1613. To move or resize the Interactive WarpLink environment, select
  1614. the symbol of three lines (at the top left corner of the screen)
  1615. by using the mouse or ALT '-'.
  1616.  
  1617. Using Dropdown Menus
  1618.  
  1619. Use the mouse, cursor control keys and shortcut keys (shown in
  1620. parentheses) to select options on the five dropdown menus.
  1621.  
  1622. The File menu (ALT-F) contains six options:
  1623.  
  1624. Load         Select this option, (F3), to load and process a
  1625.              link file.  Object modules, libraries, and link
  1626.              options automatically appear within the
  1627.              corresponding window.  You can load more than one
  1628.              link file if desired.  Subsequent link file loads
  1629.              are appended to pre-existing settings and text.
  1630.  
  1631. New          Select this option to reset and remove the object
  1632.              modules and libraries listed within the
  1633.              corresponding windows.
  1634.  
  1635. Save         Select this option (F2) to save the object modules,
  1636.              libraries and options settings to the link file
  1637.              specified in the Link File Name window
  1638.              automatically.  If there is no link file specified,
  1639.              Interactive WarpLink will prompt you for a name
  1640.              (like the Save As menu option.)
  1641.  
  1642. Save As      Select this option to have Interactive WarpLink
  1643.              prompt you for a link file name and then execute
  1644.              the Save option (above).
  1645.  
  1646. DOS Shell    Select this option (ALT-D) to shell out to DOS.  A
  1647.              memory image is written to disk in a temporary file
  1648.              that conserves memory.  Type EXIT at the DOS prompt
  1649.              to return to Interactive WarpLink.
  1650.  
  1651. Exit         Select this option (ALT-X) to exit back to DOS.
  1652.              This does not execute a DOS shell.  You will leave
  1653.              Interactive WarpLink permanently.
  1654.  
  1655. The Edit menu (ALT-E) contains six options:
  1656.  
  1657. Object Files Select this option (ALT-1) to activate the Object
  1658.              Files window.
  1659.  
  1660. Libraries    Select this option (ALT-2) to activate the Library
  1661.              window.
  1662.  
  1663. Options      Select this option (ALT-3) to activate the Link
  1664.              Options window.
  1665.  
  1666. Link File    Select this option (ALT-4) to activate the Link
  1667.              File Name window.
  1668.  
  1669. Reformat     Select this option (F4) to clean up the object
  1670.              module and library list.  The reformatting is
  1671.              performed automatically when saving a link file
  1672.              (F2) from the File menu.
  1673.  
  1674. Error Log    Select this option (ALT-5) to display the Error
  1675.              Log, a list of warnings or errors that occurred
  1676.              during the last link.
  1677.  
  1678. The Link menu (ALT-L) contains one option:
  1679.  
  1680. Link         Select this option (F7) to shell to DOS and attempt
  1681.              to link using the current settings.  Note that two
  1682.              temporary files, IWTEMP.$$$ and IWTEMP2.$$$, are
  1683.              created or overwritten during this linking process.
  1684.              They can be safely deleted when the link is
  1685.              completed.
  1686.  
  1687.              This option does NOT save to the current Link File
  1688.              Name in Window 4.  Since it uses a temporary file,
  1689.              it can be used for testing purposes before saving
  1690.              the linked file (using F2 from the File menu).
  1691.  
  1692. When Interactive WarpLink shells to DOS and begins linking, the
  1693. screen clears and a display a "Now linking...." message.
  1694.  
  1695. Interactive WarpLink will notify you of any errors or warnings
  1696. that occur during the link in the Error Log window (#5), which
  1697. contains redirected output of all Freelink messages.  A
  1698. successful link displays an information box upon return to
  1699. Interactive WarpLink, instead of Error Log window #5.
  1700.  
  1701. The Project menu (ALT-P) contains two options:
  1702.  
  1703. Load         Select this option to load a previously saved
  1704.              Project file in order to replace all current
  1705.              settings with the settings contained in the Project
  1706.              File.
  1707.  
  1708. Save         Select this option to save all settings to a
  1709.              Project file.  Interactive WarpLink will prompt you
  1710.              for the desired name.
  1711.  
  1712. Interactive WarpLink comes with three project files:  S87OVL.PRJ
  1713. is for use with Clipper Summer '87, C501OVL.PRJ for Clipper
  1714. 5.01, and DBU.PRJ as a fully linking Clipper program example for
  1715. either Clipper S'87 or 5.01.  The first two project files assume
  1716. that you will use overlays with these languages and contain
  1717. overlayable CLIPPER.LIB modules.  Each project file contains
  1718. several, typical switch settings.  Note that Clipper users who
  1719. experience difficulty or a significant slowdown when using these
  1720. settings may wish to remove some of the overlayable CLIPPER.LIB
  1721. modules.
  1722.  
  1723. You can automatically load a project file on start-up by typing
  1724. the project name after IW, that is, IW [project_file_name].  The
  1725. default file extension .PRJ is used if none is supplied.
  1726.  
  1727. You may need to use other options, in addition to those used in
  1728. the project files, to speed up link or application execution
  1729. times and free up memory.
  1730.  
  1731. The Environment menu (ALT-E) has two options, each with two
  1732. sub-options:
  1733.  
  1734. Defaults     Select the Link File Extension sub-option to set
  1735.              the default extension used with the Save and Load
  1736.              options on the File menu.  The default is .LNK.
  1737.  
  1738.              Select the Select Linker EXE Name/Path sub-option
  1739.              to specify a new name and/or path for FREELINK.EXE
  1740.              in case you renamed it previously or it isn't along
  1741.              your PATH setting.
  1742.  
  1743. Search Paths Select the Object Files sub-option to temporarily
  1744.              set the OBJ environment variable when Interactive
  1745.              WarpLink shells out to link.
  1746.  
  1747.              Select the Library Files sub-option to temporarily
  1748.              set the LIB environment variable when Interactive
  1749.              WarpLink shells out to link.
  1750.  
  1751.              Note that the OBJ and LIB environment variables in
  1752.              the master environment will be superseded by using
  1753.              the Search Paths options.  If you do not set these
  1754.              options, the master environment variables will be
  1755.              used.
  1756.  
  1757. This utility is identical to the one included with WarpLink
  1758. except that the default linker name has been changed to
  1759. FREELINK.EXE and WarpLink-only options have been starred out.
  1760.  
  1761.  
  1762.  
  1763. WARPCONV UTILITY
  1764. -=-=-=-=-=-=-=-=
  1765.  
  1766. WarpConv is a command-line utility program which converts
  1767. existing PLink-compatible link files into a format used by
  1768. Freelink and WarpLink.  Freelink uses a MSLink-compatible script
  1769. file format.  Linkers such as PLink, .RTLink, and Blinker use or
  1770. are based on a PLink-compatible script format.  If you are
  1771. switching to Freelink from one of these products, this utility
  1772. can shorten your learning curve.
  1773.  
  1774. NOTE:  The terms "link script file" and "response file" are used
  1775. interchangeably.  Although WarpConv uses the name WarpLink in
  1776. its output, Freelink will work as well, since WarpConv supports
  1777. both linkers.
  1778.  
  1779. Like all of the other Freelink utilities, WarpConv is easy to
  1780. use.  You specify an infile, an outfile, and some optional
  1781. switches and your PLink script will be converted to the MSLink
  1782. format.
  1783.  
  1784. Type:
  1785.  
  1786. WARPCONV ?
  1787.  
  1788. at the DOS prompt to display the following help screen:
  1789.  
  1790. WARPCONV, PLINK86/.RTLink script file to WarpLink response file converter
  1791. Version 2.01, Copyright 1990-1991, Michael Devore.  All rights reserved.
  1792. Type WARPCONV ? for options
  1793.  
  1794. SYNTAX:   WARPCONV [options] [input_file] [output_file]
  1795.  
  1796.           Items in brackets are optional, WARPCONV will prompt
  1797.           for file names if necessary.  If no file extension is
  1798.           supplied, WARPCONV will default to the extension .LNK.
  1799.           End a file name with a period for no extension.
  1800.  
  1801. OPTIONS:  /nc  Delete translator comments in WarpLink response file.
  1802.           /no  Do not automatically add OVLMGR.OBJ to object module list.
  1803.           /nw  Do not give any warnings following translation.
  1804.  
  1805. A more detailed description of the options follows:
  1806.  
  1807.   /nc  Delete translator comments in WarpLink response file.
  1808.  
  1809. WarpConv automatically adds translation comments to the Freelink
  1810. response file it generates.  The /nc option will eliminate these
  1811. comments from the Freelink script.
  1812.  
  1813.   /no  Do not automatically add OVLMGR.OBJ to the object module
  1814.        list.
  1815.  
  1816. WarpConv automatically adds the Freelink OVLMGR.OBJ overlay
  1817. manager file to the list of object modules if overlay usage is
  1818. detected.  The /no option will cause WarpConv to omit this file
  1819. from the response file.
  1820.  
  1821.   /nw  Do not give any warnings following translation.
  1822.  
  1823. WarpConv automatically generates warning messages in certain
  1824. situations where it detects possible incompatibilities.  The /nw
  1825. switch will not display these messages.
  1826.  
  1827. This utility is identical to the one included with WarpLink.
  1828.  
  1829.  
  1830.  
  1831. WARPLINK INFORMATION
  1832. -=-=-=-=-=-=-=-=-=-=
  1833.  
  1834. Freelink is a fully-featured product in its own right, but we
  1835. can't help telling you a bit about WarpLink, Freelink's "big
  1836. brother".  This section describes several of the features found
  1837. in the WarpLink commercial linker that are not in Freelink, and
  1838. tells those interested how to order WarpLink.  We think a bit of
  1839. a commercial is a small price to pay for a free fully-featured
  1840. linker, but if you do not want to even put up with this much
  1841. just skip past this section.  We won't hold it against you.  We
  1842. won't even know if you do it.
  1843.  
  1844. WarpLink is the world's first DOS-based multiple language
  1845. dynamic overlay linker.  It is the first Clipper linker to
  1846. support true incremental linking.  As the sincerest form of
  1847. flattery, the incremental linking techniques pioneered by
  1848. WarpLink are now in use by the competition almost unchanged.
  1849. With the introduction of QuickLinker and overlay caching
  1850. technologies, WarpLink 2.5 is often the fastest overlay linker
  1851. you can purchase anywhere, both during linking and during your
  1852. overlaid application's execution, without exception.  (Freelink
  1853. shares much of the QuickLinker and caching technology).
  1854.  
  1855. ADVANCED LINKER OPTIONS
  1856.  
  1857. WarpLink supports the following advanced linker options:
  1858.  
  1859. /b             Beep the speaker upon exit
  1860. /clps          use SMARTMEM.XXX CLiPper SmartMem functions
  1861. /d             use DOSSEG segment ordering
  1862. /em            use Extended dictionary in Microsoft-compatible library
  1863. /s             Symbol names are case sensitive
  1864. /wn            Warnings are Not displayed
  1865.  
  1866. ADVANCED OVERLAY OPTIONS
  1867.  
  1868. WarpLink supports the following advanced overlay options:
  1869.  
  1870. /oc:[.]<name>  Overlay Class name, leading '.' if exact match
  1871.   (allows overlaying non-'CODE' class code, such as with
  1872.   Quicksilver programs)
  1873.  
  1874. /ohp3:[-]<size>  Overlay stasH in EMS, forced version 3.0
  1875.                  compatibility
  1876.   (forces EMS 3.x stashing algorithm, for EMS drivers that
  1877.   report EMS 4.0 capability but in actuality do not support
  1878.   direct lower memory mapping)
  1879.  
  1880. /oi            make Overlays Internal to EXE file
  1881.   (no OVL file created, overlays appended to EXE file)
  1882.  
  1883. /ol:<count>    Overlay maximum Load count
  1884.   (advanced overlay use only)
  1885.  
  1886. /on:<name>     Overlay file Name
  1887.   (specify a nondefault OVL file name)
  1888.  
  1889. /os:<size>     Overlay manager internal Stack size in kilobytes
  1890.   (advanced overlay use only)
  1891.  
  1892. CLARION OVERLAY SUPPORT
  1893.  
  1894. WarpLink supports Clarion overlays with a special Clarion
  1895. overlay manager which allows all of the same overlay, EMS, and
  1896. XMS functionality as other languages.
  1897.  
  1898. PROFILER UTILITY
  1899.  
  1900. WarpLink comes with a true profiler for both overlaid and
  1901. nonoverlaid applications which allows you to get the following
  1902. information about your application:
  1903.  
  1904.   1.  Total execution time
  1905.   2.  Time spent in DOS or BIOS calls
  1906.   3.  Time spent in the overlay manager
  1907.   4.  Time lost to the profiler
  1908.   5.  Number of calls to overlaid functions
  1909.   6.  Number of overlay loads
  1910.   7.  Number of overlay reloads
  1911.   8.  Average execution times for individual functions and
  1912.       procedures
  1913.   9.  Cumulative execution times for individual functions and
  1914.       procedures
  1915.  
  1916. The profiler is extremely flexible in selecting files or symbols
  1917. to profile, and in its reporting capabilities supporting a
  1918. variety of sorting options and output formats .
  1919.  
  1920. DDL SUPPORT
  1921.  
  1922. WarpLink supports DOS D-format Dynamic Link Libraries for any
  1923. language that is compatible with WarpLink.
  1924.  
  1925. NORTON GUIDES
  1926.  
  1927. WarpLink comes with a Norton Guides Help System that allows
  1928. online reference of WarpLink commands and details of WarpLink's
  1929. operation.
  1930.  
  1931. WARPHOG UTILITY
  1932.  
  1933. Part of the WarpLink distribution package is a command-line TSR
  1934. called WarpHog that allows a user to simulate a particular free
  1935. memory setting on your machine.  With WarpHog you can set your
  1936. free memory to various amounts for testing your application's
  1937. operation under those conditions, then easily remove WarpHog
  1938. from memory after your test is complete simply by running
  1939. WarpHog without parameters.
  1940.  
  1941. SP UTILITY
  1942.  
  1943. Included with WarpLink is a stand-alone utility called SP that
  1944. will pack a program's Clipper symbol table.  This is useful if
  1945. you use incremental linking and want to pack the symbol table
  1946. prior to release without relinking with the /sp option, or if
  1947. the /sp option takes up too much memory at linktime.
  1948.  
  1949. SETJMP/LONGJMP SUPPORT
  1950.  
  1951. WarpLink has a available-on-request alternate overlay manager
  1952. that supports setjmp() and longjmp() use with overlays in
  1953. several situations.
  1954.  
  1955. MANUAL AND SUPPLEMENT
  1956.  
  1957. WarpLink comes with a 200 page manual and a version 2.5
  1958. supplement.
  1959.  
  1960. TECHNICAL SUPPORT
  1961.  
  1962. Registered WarpLink users enjoy free technical support for
  1963. WarpLink via telephone, FAX, BBS, and CompuServe, for as long as
  1964. they own the product.
  1965.  
  1966. See the file ORDER.FRM for information about ordering WarpLink,
  1967. and a special promotion for all those who place an order as well
  1968. as for BBS systems which carry the Freelink package.
  1969.  
  1970.  
  1971.  
  1972. OTHER FREELINK FEATURES AND GENERAL COMMENTS
  1973. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  1974.  
  1975. The $$_COM_END Variable
  1976.  
  1977. An age-old problem with the way DOS deals with .COM files is its
  1978. decision to leave memory management up to the .COM file.  When
  1979. an .EXE program loads, DOS will automatically allocate to it only
  1980. the memory it requests.  When a .COM file loads, all available
  1981. memory is allocated to it.  In most situations, the DOS memory
  1982. allocation procedure for a .EXE file is preferred to that for a
  1983. .COM file.  That way other programs, such as TSRs, can make use
  1984. of the memory the .COM file doesn't need.  $$_COM_END is a
  1985. predefined public symbol that your program can use for just that
  1986. purpose.
  1987.  
  1988. $$_COM_END is a symbol which represents the linker computed
  1989. amount of memory required by the code and data segments of your
  1990. program.  Declare it as an EXTRN in your program and use it with
  1991. int 21h function 4Ah to deallocate all but that amount, plus
  1992. whatever stack you need.  $$_COM_END does consume 2 bytes for
  1993. storage, so a COM file is two bytes larger than normal if you
  1994. declare $$_COM_END as an external.  If $$_COM_END is declared as
  1995. a public, the linker assumes that you wish to use the variable
  1996. name for your own purposes and does not treat $$_COM_END as a
  1997. special variable.
  1998.  
  1999. $$_COM_END automatically adjusts for the Program Segment Prefix
  2000. (PSP) size of 256 bytes when computing the required memory.
  2001.  
  2002. $$_COM_END depends upon the first object module to have _TEXT
  2003. (or corresponding class 'CODE' segment) as the very first SEGDEF
  2004. (segment definition) record.  Most languages do this
  2005. automatically.
  2006.  
  2007. Here's an assembly language code fragment showing sample use of
  2008. the $$_COM_END variable:
  2009.  
  2010. EXTRN $$_COM_END:WORD
  2011.    ...
  2012.    mov ax, $$_COM_END ; Get program size.
  2013.    add ax, StackSize  ; Add stack.
  2014.    test al,1          ; Check if odd byte-aligned stack
  2015.    je @@Even          ; No: even byte alignment.
  2016.    inc ax             ; Yes it's odd.  Bump one.
  2017. @@Even:
  2018.    mov sp, ax         ; Initial stack = program size + stack size
  2019.    shr ax, 1          ; Divide AX by 16.
  2020.    shr ax, 1
  2021.    shr ax, 1
  2022.    shr ax, 1
  2023.    inc ax             ; Round up a paragraph.
  2024.    mov bx, ax         ; BX = new size of memory block in paragraphs
  2025.    mov ah, 4Ah        ; Resize Memory Block, ES=PSP
  2026.    int 21h            ; Returns w/ CF=1 on error.
  2027.    jnc @@NoError      ; If CF=0, all is well.
  2028.    mov ax, 4Ch        ; Error, exit to DOS
  2029.    int 21h            ; via function 4Ch.
  2030. @@NoError:
  2031.    ...              ; Success.
  2032.  
  2033.  
  2034. The $$_EXE_IMAGE_SIZE Variable
  2035.  
  2036. If public symbol $$_EXE_IMAGE_SIZE is declared and the program
  2037. is linked without the /c option (producing an EXE file),
  2038. Freelink will place the doubleword load image size of the file
  2039. in the $$_EXE_IMAGE_SIZE symbol.  Freelink will not create the
  2040. symbol if it is not declared.  This feature is roughly analogous
  2041. to the $$_COM_END variable created when the /c option is used,
  2042. with somewhat different behavior that is consistent with the
  2043. complex nature of EXE files.
  2044.  
  2045. You MUST allocate at least four bytes for the variable
  2046. $$_EXE_IMAGE_SIZE.  Otherwise, Freelink will write beyond the
  2047. bounds of the variable, possibly causing program malfunction.
  2048. Variable space is not automatically added to the program by the
  2049. linker as is done with the $$_COM_END variable.
  2050.  
  2051. Using the $$_EXE_IMAGE_SIZE variable provides the capability to
  2052. easily determine the end of a program in memory in order to free
  2053. up excess memory (for DOS or for other programming purposes).
  2054.  
  2055.  
  2056. SMALL CODE MODEL OVERLAYS
  2057.  
  2058. Brackets, '[' and ']', can be used instead of parentheses to
  2059. indicate overlays.  This causes Freelink to act differently than
  2060. when parentheses are used.  When brackets are used, calls from
  2061. an overlay to the root are vectored through the overlay manager,
  2062. rather than called directly as with overlays specified by
  2063. parentheses.  This ensures that the overlay is loaded and in the
  2064. same location after the program returns from the root function
  2065. or procedure.  Overlay to root vectoring can occasionally cause
  2066. a slight speed degradation in an operating program and is not
  2067. recommended if it is not necessary.  Typically, if you use the
  2068. /r option you need not use brackets as the overlay will always
  2069. be loaded at the same address upon return, unless you are
  2070. overlaying small code models (near calls between modules).
  2071.  
  2072. If you are using small code model overlays, brackets must be
  2073. used instead of parentheses to specify overlays.  The program
  2074. will not work unless the brackets are used.
  2075.  
  2076. FREELINK Q&A
  2077.  
  2078. The following commonly asked questions and their answers may
  2079. help you use Freelink.  They have has been compiled from
  2080. experience with our user base and the application development
  2081. community.
  2082.  
  2083.   Q. HOW DO YOU CREATE AN OVERLAY WITH FREELINK?
  2084.  
  2085.   A. In a response file or from the DOS command line, .OBJ files
  2086.      and .LIB files that are surrounded by parentheses are put
  2087.      into an overlay; those that are not surrounded by
  2088.      parentheses are put into the root.  Remember that if you
  2089.      are using overlays you need to include the OVLMGR.OBJ file
  2090.      in your object file list, and it can never be overlaid.
  2091.  
  2092.   Q. CAN LIBRARY FILES (.LIB FILES) BE OVERLAID?
  2093.  
  2094.   A. Absolutely.  They are overlaid the same way that object
  2095.      files are overlaid:  put parentheses around them.
  2096.  
  2097.   Q. IS THERE ANY DIFFERENCE IF I HAVE ALL OF MY OBJECT FILES
  2098.      WITHIN ONE SET OF PARENTHESES, VERSUS HAVING EACH
  2099.      INDIVIDUAL OBJECT FILE IN ITS OWN SET OF PARENTHESES?
  2100.  
  2101.   A. There is no difference whatsoever.  In either
  2102.      case, Freelink will create a single .EXE file and a single
  2103.      .OVL file.
  2104.  
  2105.   Q. DOES FREELINK CREATE MULTIPLE .OVL FILES?
  2106.  
  2107.   A. No.  If you are using overlays only one .OVL file will be
  2108.      created.
  2109.  
  2110.   Q. DOES FREELINK SUPPORT STATIC OVERLAYS?
  2111.  
  2112.   A. No.  Freelink efficiently and effectively uses
  2113.      dynamic overlays without any program changes.  Only dynamic
  2114.      overlays are supported by Freelink.
  2115.  
  2116.   Q. WHAT IS THE LEVEL OF GRANULARITY FOR SWAPPING OVERLAYS IN
  2117.      AND OUT OF THE OVERLAY POOL?
  2118.  
  2119.   A. Freelink swaps overlays into and out of the overlay pool at
  2120.      the segment level.  For Clipper this means at the function
  2121.      level, for other languages this usually means at the module
  2122.      level.
  2123.  
  2124.   Q. WHAT IS AN OVERLAY POOL?
  2125.  
  2126.   A. An overlay pool is the separate area of RAM that Freelink
  2127.      reserves when your application runs.  All of your overlaid
  2128.      functions and procedures are swapped into and out of this
  2129.      overlay pool only; no other memory is used.
  2130.  
  2131.   Q. HOW CAN I USE LESS MEMORY IN MY PROGRAM?
  2132.  
  2133.   A. Overlays are an obvious way for your program to use less
  2134.      memory, but judicious use of .LIB files works well, too.
  2135.      The nature of .OBJs is that everything in an .OBJ winds up
  2136.      in the executable, whether the program needs it or not.  So
  2137.      if you have a C module containing a 3K function that it
  2138.      never calls, you'll get hit by a 3K code size penalty.
  2139.      .LIBs, on the other hand, link in only the routines they
  2140.      need from the .OBJs they contain.  If that 3K function were
  2141.      in its own .OBJ file, which was then added to a .LIB, even
  2142.      if that lib was specified on the command line, the function
  2143.      would not be used.
  2144.  
  2145.   Q. HOW DO I SPEED UP THE LINK PROCESS?
  2146.  
  2147.   A. You can speed up linking by not using the /m (create map
  2148.      file) or /mx (create expanded map file) options, and by
  2149.      copying your .LIB files to a RAM disk and using the LIB
  2150.      environment variable; to point to their new location.  You
  2151.      can similarly use the TMP environment variable for
  2152.      temporary files.  Also, be sure to use the /xp, /xt, /ql,
  2153.      and incremental link options where possible to really speed
  2154.      things up.
  2155.  
  2156.   Q. DOES FREELINK USE INTERRUPTS FOR OVERLAYS LIKE MS LINK?
  2157.  
  2158.   A. Freelink does not use an overlay manager interrupt so
  2159.      there's no equivalent to MS Link's /O option.
  2160.  
  2161.   Q. HOW DO I PUT COMMENTS IN A RESPONSE FILE?
  2162.  
  2163.   A. Comments in a response file are denoted by a '#' in the
  2164.      first column.  Putting a '#' in a different column will
  2165.      result in an error.
  2166.  
  2167.   Q. WHAT TYPE OF CODE CAN'T I OVERLAY?
  2168.  
  2169.   A. Do not overlay any .OBJ or .LIB module which contains
  2170.      interrupt handlers.  Do not overlay modules which call
  2171.      other modules via an INDIRECT near call (Near calls within
  2172.      an overlaid module are not a problem.)  You can overlay
  2173.      modules which call other modules via a DIRECT near call if
  2174.      you use brackets instead of parentheses on an overlay
  2175.      (small code model overlaying).  Do not place startup code
  2176.      in an overlay, the program must have a starting address
  2177.      that is in the root.
  2178.  
  2179.  
  2180.  
  2181. CUSTOM DEVELOPMENT AND DISTRIBUTION
  2182. -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  2183.  
  2184. hyperkinetix and Michael Devore perform custom development of
  2185. the Freelink and WarpLink linker and the overlay managers for
  2186. use in such areas as ROM-based systems, custom-designed error
  2187. handlers, and overlay programmable interfaces.  If you have a
  2188. situation that requires linking or overlay management expertise,
  2189. we may be able to help.
  2190.  
  2191. Special or custom copies of Freelink and WarpLink are available
  2192. for bundling arrangements with vendors who wish to include a
  2193. linker with their products.  An OEM version of WarpLink already
  2194. enjoys successful marketing by a major third party vendor in one
  2195. WarpLink-compatible language.
  2196.  
  2197. Call hyperkinetix at 800-873-9993 or 714-573-2260, or send
  2198. CompuServe mail to hyperkinetix support [75300,2010] or to
  2199. Michael Devore [71540,62], for further details.
  2200.  
  2201. Call SOFTSOL in Europe at +49-40-7665764, or send CompuServe
  2202. mail to Max Bressel [100112,3401]
  2203.  
  2204.  
  2205. TROUBLESHOOTING
  2206. -=-=-=-=-=-=-=-
  2207.  
  2208. Here are short explanations of the most common warning or error
  2209. messages that you might see while using Freelink.
  2210.  
  2211. Bad COM file format, program has invalid entry point:
  2212.   Either the /c option (create .COM file) was used
  2213.   inappropriately, the assembly language source is missing the
  2214.   ORG 100h statement, or the ORG 100h came after code or data
  2215.   was defined in the program.
  2216.  
  2217. Bad COM file format.  Program has segment fixups:
  2218.   Either this is supposed to be an .EXE program, or the program
  2219.   contains a pseudo-op such as DD or @Data that requires
  2220.   segment-relative information to be calculated by the
  2221.   linker -- not valid in .COM programs.
  2222.  
  2223. Bad COM file format.  Program has stack segment:
  2224.   Either this is supposed to be an .EXE program, or the .Stack
  2225.   directive appeared in a .COM program.  .COM programs can't
  2226.   have a .Stack directive; the program must manipulate the stack
  2227.   pointer directly.
  2228.  
  2229. Bad COM file format.  Program larger than 64K:
  2230.   This happens on those rare occasions where a .COM program gets
  2231.   too big -- or the /c option was used on an .EXE file that
  2232.   somehow passed as a .COM file.  If it's the former, try to
  2233.   recompile in small model.
  2234.  
  2235. DOS could not find a file needed by Freelink:
  2236.   A specified file (or files) could not be found on the current
  2237.   directory or on the path.  Make sure it has the correct
  2238.   spelling, drive letter, or path specification.  Another
  2239.   possibility is that an .OBJ file was not created at all due to
  2240.   a compiler error.  This message will also appear if you don't
  2241.   specify your link file extension when using response files.
  2242.  
  2243. Externally declared symbol has no public definition:
  2244.   This usually happens when an .OBJ or .LIB file was not
  2245.   specified on the command line, or when the name of a function
  2246.   or procedure has been misspelled in a program.  The linker
  2247.   cannot find a symbol needed by the program.
  2248.  
  2249. File access denied:
  2250.   Some sort of network foul-up or DOS chicanery, such as
  2251.   application of read-only status to a file that should be
  2252.   disposable (such as an old .OBJ file) has taken place.
  2253.  
  2254. Fixup overflow:
  2255.   The most common cause of fixup overflows is when you're coding
  2256.   in a high-level language, switch memory models in midstream,
  2257.   and forget to delete old .OBJ  files.  Trying to link small
  2258.   with large model code, for example, when you didn't plan for
  2259.   it, can result in many of these messages.  Another cause is in
  2260.   assembly, when an intersegment SHORT or NEAR jump or call is
  2261.   made.
  2262.  
  2263. Invalid Freelink option:
  2264.   An invalid option was passed to Freelink either at the DOS
  2265.   prompt or through a response file.  Refer to the Freelink
  2266.   Options section, for a complete description of all valid
  2267.   options.  This error most often occurs when using Interactive
  2268.   WarpLink and specifying options only supported by WarpLink or
  2269.   when running options together with a plus sign or an object
  2270.   module name.
  2271.  
  2272. Length of response file line exceeded 127 characters:
  2273.   Response files can be any size, but the length of any
  2274.   particular line can't be longer than a DOS command line.  Make
  2275.   sure the text editor used to create the response file
  2276.   terminates each line with a carriage return/linefeed, not just
  2277.   at the end of a paragraph.
  2278.  
  2279. Nested parentheses in link syntax:
  2280.   There's an extra parenthesis somewhere.  Check the overlay
  2281.   specifications and remove the offending set of parentheses..
  2282.  
  2283. No object modules specified in link syntax:
  2284.   There's no .OBJ file listed, but the command includes at least
  2285.   one of the following:  .MAP file spec, executable name, or lib
  2286.   name.
  2287.  
  2288. No stack segment was found for the EXE file:
  2289.   Most often caused when the /c option was omitted when linking
  2290.   a tiny model assembly program.  An .EXE file must set up its
  2291.   own stack; it may seem to work at times but the program will
  2292.   assuredly fail if the .STACK directive isn't used.
  2293.  
  2294. Not enough memory to operate Freelink:
  2295.   Freelink needs about 250K to operate, more for larger
  2296.   programs.  Use of the /sp option requires a good deal more
  2297.   memory than usual, as Clipper symbol table information is
  2298.   kept in memory.
  2299.  
  2300. Segment size exceeds 64K:
  2301.   Most often caused when the wrong memory model is used.
  2302.   Typical of when a large array is declared in a model smaller
  2303.   than compact.
  2304.  
  2305. Symbol has more than one public definition:
  2306.   This may have occurr in a program that has two globally
  2307.   visible symbols by the same name.  Renaming one of the symbols
  2308.   may solve this problem.
  2309.  
  2310. Too many open files or handles:
  2311.   Change the FILES= statement in your CONFIG.SYS file to allow
  2312.   more files to be open at one time.
  2313.  
  2314. Unexpected end of file:
  2315.   The file ended before the end of a record was reached.  This
  2316.   is usually due to file truncation caused by DOS error or
  2317.   system reset.  Recreate the module and relink.
  2318.  
  2319.  
  2320. In addition to the previous error and warning message
  2321. explanations, the steps suggested below may help you resolve the
  2322. following problem conditions:
  2323.  
  2324. Clipper 5.01 debugger CLD.EXE does not work:
  2325.   Do not use the runtime EMS or XMS options (/ox, /ohp, /oht,
  2326.   /orp, /ort, /ou)  with Clipper 5.01's debugger.  Turn these
  2327.   options off with WarpMod before running the debugger.  Turn
  2328.   them on with WarpMod when you are done using the debugger.
  2329.  
  2330. Intermittent or erratic application runtime problems when using
  2331. the /ox option:
  2332.   Use the SET CLIPPER=BADCACHE setting when using Clipper 5.01.
  2333.   Use the SET CLIPPER=E0 setting (turn off Clipper's use of EMS)
  2334.   when using Clipper Summer '87.
  2335.  
  2336. No application speed increase when using the /ox and /ohp
  2337. options, even though there is significant free EMS memory
  2338. present:
  2339.   The /ohp option has detected LIM EMS version 3.2 memory on the
  2340.   machine being used.  For the /ox and /ohp options to work
  2341.   together, use LIM EMS 4.0.
  2342.  
  2343. Error 94h occurs when using Windows or OS/2 with the /ox option:
  2344.   To use /ox safely under Windows and OS/2 you should lock the
  2345.   EMS page frame.  Consult your Windows or OS/2 documentation
  2346.   for more information about locking the EMS page frame.
  2347.  
  2348. Program size increase when using /ql option:
  2349.   Erase the old QLK file and let Freelink rebuild it.
  2350.  
  2351. Internal errors when using /ql option:
  2352.   Make sure that the /ql option is placed before the library
  2353.   list.  Do not use the /ql option if you use direct library
  2354.   modules in the object file list and the EXE name is different
  2355.   from the first object file name.  Try deleting the QLK file
  2356.   and relinking.
  2357.  
  2358. Internal errors when using /clpi option:
  2359.   Make sure the /clpi option is placed before the library list.
  2360.  
  2361.  
  2362. If you continue to experience problems with Freelink, your
  2363. remaining remedies are as follows:
  2364.  
  2365. As a not-for-profit product, Freelink cannot and does not have
  2366. the free technical support enjoyed by WarpLink owners.  Please
  2367. do not contact Michael Devore or hyperkinetix for technical
  2368. support except as described below.  Serial numbers for WarpLink
  2369. will be checked for all technical support contacts.  No
  2370. telephone, BBS, or CompuServe Mail support will be given for
  2371. questions concerning Freelink's operation.  This does not mean,
  2372. however, that we are uninterested in or do not care about your
  2373. problems.  Although we are unable to offer standard technical
  2374. support, we are able to offer limited support through
  2375. hyperkinetix's forum on CompuServe ONLY.  GO CIS:PCVEND and post
  2376. questions in section 9, the hyperkinetix section.
  2377.  
  2378. Of necessity, this support will be lower priority than with
  2379. paying commercial products such as WarpLink and resolution of
  2380. specific problems cannot be guaranteed.
  2381.  
  2382. If you experience what you feel is a serious error in Freelink's
  2383. operation, you have carefully checked over the documentation,
  2384. have unsucessfully tried various means to get around the
  2385. problem, and you do not have access to CompuServe to post a
  2386. message on PCVEND (GO CIS:PCVEND), then you can also use
  2387. CompuServe's Internet mail capability to send CompuServe Mail to
  2388. Michael Devore, CIS ID: [71540,62] (71540.62@compuserve.com)
  2389. about the error.  PLEASE send Internet mail ONLY if all of the
  2390. previous requirements are met and you are absolutely sure the
  2391. problem lies with Freelink.  Internet mail costs me,
  2392. Michael Devore, actual money both to send and receive through
  2393. CompuServe.  This cost is not charged through to some nameless,
  2394. faceless, rich corporation, but rather to the named, faced,
  2395. unincorporated, not-incredibly-wealthy, me.  If Internet mail
  2396. proves too burdensome, I will be forced to discontinue accepting
  2397. it so please, for everyone's sake, exhaust all other avenues
  2398. first.
  2399.  
  2400. Last document revision 11/08/92, Michael Devore & Judy Cammelot
  2401. Copyright 1992, Michael Devore.
  2402. Portions of this document copyright 1991, hyperkinetix
  2403.